XCode 4.2 Сбой сборки NSManagedObject
Я создал UserModel.xcdatamodeld с одним элементом Entry: UserBase, и я добавил атрибут, имя которого является UserID, а type - Integer 32.
После этого я создаю для него классы с подклассом file- > new file- > NSManagedOBject, который автоматически создает UserBase.h и .m.
В моем контроллере импортирован файл UserBase.h и создается свойство:
NSManagedObjectContext *userBaseObjectContext;
с
@property (nonatomic, retain) NSManagedObjectContext *userBaseObjectContext;
В файле mycontroller.m синтезировано свойство userBaseObjectContext и в функции DidLoad я пробовал это:
UserBase *userObject=(UserBase *)[NSEntityDescription insertNewObjectForEntityForName:@"UserBase" inManagedObjectContext:userBaseObjectContext];
[userObject setUserID:[NSNumber numberWithInt:42]];
NSError *error;
if(![userBaseObjectContext save:&error])
{
UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Application error" message:@"error" delegate:nil cancelButtonTitle:@"Close" otherButtonTitles:nil,nil];
[alert show];
[alert release];
}
else
NSLog(@"not working...");
Когда я пытаюсь создать свой проект, я получил эту ошибку:
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_NSEntityDescription", referenced from:
objc-class-ref in LoginController.o
"_OBJC_METACLASS_$_NSManagedObject", referenced from:
_OBJC_METACLASS_$_UserBase in UserBase.o
"_OBJC_CLASS_$_NSManagedObject", referenced from:
_OBJC_CLASS_$_UserBase in UserBase.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Что это значит?
Я следовал этому руководству: http://mobile.tutsplus.com/tutorials/iphone/iphone-core-data/
Ответы
Ответ 1
Undefined символы обычно означают, что некоторые Framework отсутствуют. Frameworks - это библиотеки предварительно скомпилированных классов, которые вы можете использовать в своем приложении.
Чтобы добавить фреймворк на XCode 4:
- Нажмите на свой корень проекта (элемент в левом верхнем углу с иконкой Blueprint).
- Нажмите на свою цель (обычно одно и то же имя приложения с иконкой "A, сделанной из карандашей" слева).
- Перейдите на вкладку "Сводка" вверху, затем прокрутите вниз... сверните разделители и в разделе "Информация о развертывании iPad" вы найдете раздел "Связанные рамки и библиотеки" (см. рис. 1 ниже).
- Нажмите кнопку "+" внизу этого списка.
- Всплывающее окно предложит вам выбрать Рамку, найти ее, и когда вы ее выберете, нажмите "Добавить".
И что это! Классы, содержащиеся в этой Framework, будут доступны в вашем коде, если вы выполните правильный #import.
Рисунок 1:
![enter image description here]()
Чтобы поддерживать упорядоченный проект, я предлагаю перетащить вновь добавленную структуру в "Framework" группы.
Ответ 2
Если вы импортировали файл предупреждения в свой проект, убедитесь, что в целевом членстве указано галочка. У меня была такая же проблема, и после того, как я пометил поле, и ошибка исчезла!
Ответ 3
Попробуйте удалить свой NSManagedObject Class из проекта и сгенерировать его снова. Это помогло мне;)