XCode 4.2 NSManagedObject не удалось построить контекст - PullRequest
10 голосов
/ 02 декабря 2011

Я создал UserModel.xcdatamodeld с одной записью: UserBase и добавил атрибут, имя которого - UserID, а тип - 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/

Ответы [ 3 ]

20 голосов
/ 07 марта 2012

Неопределенные символы обычно означают, что некоторые Framework отсутствуют.Фреймворки - это библиотеки предварительно скомпилированных классов, которые вы можете использовать в своем приложении.

Чтобы добавить фреймворк в XCode 4:

  1. Нажмите на корень вашего проекта (элемент в левом верхнем углу).угол со значком светокопии).
  2. Нажмите на свою цель (обычно это то же имя приложения с «иконкой из карандашей» слева).
  3. Нажмите на «Сводку»наверху, затем прокрутите вниз ... сверните разделители и в разделе «Информация о развертывании iPad» вы найдете раздел «Связанные фреймворки и библиотеки» (см. рис. 1 ниже).
  4. Нажмите «+»Кнопка внизу этого списка.
  5. Во всплывающем окне вам будет предложено выбрать платформу, найти ее, а когда вы ее выбрали, нажать кнопку Добавить.

И это все!Классы, содержащиеся в этой платформе, будут доступны в вашем коде до тех пор, пока вы выполните правильный # импорт.

Рисунок 1:

enter image description here

Чтобы сохранить заказанный проект,Я предложу перетащить недавно добавленный фреймворк в группу «Каркасы».

3 голосов
/ 12 октября 2012

Если вы импортировали файл предупреждений в свой проект, убедитесь, что флажок отмечен на Target Membership!У меня была такая же проблема, и после того, как я поставил галочку, ошибка исчезла!

0 голосов
/ 09 сентября 2014

Попробуйте удалить ваш класс NSManagedObject из проекта и сгенерировать его снова.Это помогло мне;)

...