Основной атрибут данных не создается - PullRequest
1 голос
/ 06 июля 2011

Я решил добавить атрибут NSNumber к одной из моих сущностей в основных данных. Я очистил код и удалил приложение из симулятора. Затем я добавил следующий код в мой appDelegate, и он говорит мне, что мой атрибут NSNumber не существует.

People *PeopleA = [NSEntityDescription insertNewObjectForEntityForName:@"People" inManagedObjectContext:context];
PeopleA.name = @"Paul";
PeopleA.number = [NSNumber numberWithInt:12];

Атрибут name работает просто отлично, это было сделано раньше и всегда работает. Но когда он достигает PeopleA.number, он падает с:

-[People setNumber:]: unrecognized selector sent to instance 0x4d5eeb0

Итак, я сделал po 0x4d5eeb0 и увидел, что есть атрибут имени, но не один для числа. Мой базовый класс данных должен быть хорошим, потому что я сделал, чтобы XCode сделал это для меня.

В чем может быть проблема?

Вот мой People.h

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>

@class Group;

@interface People : NSManagedObject {
@private
}
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) id image;
@property (nonatomic, retain) NSNumber * number;
@property (nonatomic, retain) Group * group;

@end

People.m

#import "People.h"
#import "Group.h"

@implementation People
@dynamic name;
@dynamic image;
@dynamic number;
@dynamic group;

@end

po 0x4d5eeb0 получает меня:

<People: 0x5932290> (entity: People; id: 0x59322f0 <x-coredata:///People/t83A9C7D9-4F7A-4189-9EC5-7695968A29552> ; data: {
    group = nil;
    name = Paul;

Ответы [ 3 ]

2 голосов
/ 07 июля 2011

Печать объекта в отладчике должна дать вам все свойства, определенные в классе, независимо от того, является ли это подклассом NSManagedObject, содержащимся в контексте, или просто обычным обычным классом. В распечатке отладчика отсутствует не только свойство number, но и свойство image.

Действительно, единственный способ, который мог бы случиться, был, если у вас не было новой версии файла класса, добавленной к цели, но вы фактически использовали старую версию, в которой отсутствовали новые свойства.

Проверьте целевой объект на наличие старых файлов и / или убедитесь, что новая версия была правильно добавлена ​​в целевой объект сборки.

1 голос
/ 07 июля 2011

Попробуйте присвоить атрибуту number другое имя, например theNumber.В атрибутах Core Data есть несколько известных зарезервированных слов и неизвестное число (без каламбура), которые не задокументированы - возможно, вы наткнулись на другое.

0 голосов
/ 07 июля 2011

Если сомневаетесь, удалите его.

В итоге я удалил два файла xcdatamodel и файл xcdatamodeld.Также удалил их в соответствующих папках.Затем я создал новый.Сначала у меня были некоторые проблемы, но теперь это действительно работает.

У меня есть небольшая проблема с xcode, которая думает, что мой файл Group.h не имеет метода addPeople, что он делает.Таким образом, он говорит, что он может не отвечать на этот метод или любой другой метод.Это также вызывает ошибку Lexical or Preprocessor Issue: 'Group.h' file not found во время сборки, но, похоже, все по-прежнему работает.

Я до сих пор не знаю, что происходит.Спасибо всем за их предложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...