У меня есть набор данных книг и авторов, с отношением многих ко многим.
Есть около 10 ^ 6 книг и 10 ^ 5 авторов, с в среднем по 10 авторов на книгу.
Мне нужно выполнить ряд операций с набором данных, например подсчет количества книг каждого автора или удаление всех книг определенного автора из набора. 1 из 'initWithFrame:'
Это вызывает его:
operationLabel = [[NSTextField alloc] initWithFrame:CGRectMake(0, self.frame.size.height / 2 - (40 * 3), self.frame.size.width, 100)];
Определение:
- (id)initWithFrame:(NSRect)frameRect;
Итак, первый аргумент - NSRect, давайте проверим его:
typedef CGRect NSRect;
Как это может вызвать ошибку? Одни и те же типы называются по-разному!
NSRect
является тем же типом, что и CGRect
при сборке для iOS, для 64-битной архитектуры Mac или для 32-битной архитектуры Mac, если макрос NS_BUILD_32_LIKE_64
определен как 1 в командной строке или в префиксном заголовке.
Или, цитируя NSGeometry.h:
#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
Откуда вы взяли определение typedef для NSRect
? Согласно документам NSRect
определяется следующим образом:
typedef struct _NSRect {
NSPoint origin;
NSSize size;
} NSRect;
Другими словами, это структура, которая выглядит так же, как CGRect
(но не простой typedef
) . Уже что-то написано о преобразованиях между CGRect и NSRect .
В дополнение к ответу zoul я подумал, что упомяну две вспомогательные функции (макросы?) от Apple (начиная с 10.5):
NSRect NSRectFromCGRect(CGRect cgrect)
CGRect NSRectToCGRect(NSRect nsrect)