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 из проекта и сгенерировать его снова. Это помогло мне;)