Проблема при создании производного класса NSManagedObject - PullRequest
1 голос
/ 08 марта 2011

Я здесь что-то не так делаю ... Я знаю, что

Я использую XCode, и я создал следующий класс, используя модельера данных:

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


@interface Project : NSManagedObject {
@private
}
@property (nonatomic, retain) NSNumber * indent;
@property (nonatomic, retain) NSNumber * collapsed;
@property (nonatomic, retain) NSString * color;
@property (nonatomic, retain) NSNumber * project_id;
@property (nonatomic, retain) NSNumber * item_order;
@property (nonatomic, retain) NSNumber * cache_count;
@property (nonatomic, retain) NSNumber * user_id;
@property (nonatomic, retain) NSString * name;

@end

Когда я пытаюсь распространить этот класс с данными из источника JSON, используя следующий код:

NSString* filePath = [[NSBundle mainBundle] pathForResource:@"projects" ofType:@"json"];

if (filePath) {
    NSString* jsonString = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
    DLog(@"JSON for Projects:%@", jsonString);
    SBJsonParser* jsonParser = [SBJsonParser new];
    id response = [jsonParser objectWithString:jsonString];
    NSArray* array = (NSArray*) response;
    NSEnumerator* e = [array objectEnumerator];
    NSDictionary* dictionary;
    while ((dictionary = (NSDictionary*)[e nextObject])) {

        Project* project = [[Project alloc] init];
        project.user_id = [dictionary objectForKey:@"user_id"];
        project.name = [dictionary objectForKey:@"name"];
        project.color = [dictionary objectForKey:@"color"];
        project.collapsed = [dictionary objectForKey:@"collapsed"];
        project.item_order = [dictionary objectForKey:@"item_order"];
        project.cache_count = [dictionary objectForKey:@"cache_count"];
        project.indent = [dictionary objectForKey:@"indent"];
        project.project_id = [dictionary objectForKey:@"project_id"];

        [elementArray addObject:project];

        [project release];
    }
}

Однако код останавливается на строке project.user_id = [dictionary objectForKey:@"user_id"]; с исключением "* Завершение работы приложения из-за необработанного исключения" NSInvalidArgumentException ", причина: '- [Project setUser_id:]: нераспознанный селектор, отправленный экземпляру 0x590bcb0' "

Я не знаю, почему это происходит или как решить эту проблему.

Ответы [ 3 ]

2 голосов
/ 08 марта 2011

Я настроил поле искажения реальности, чтобы не нарушать свой NDA. И теперь я могу ответить на ваш вопрос, это никак не связано с продуктом, который нельзя называть.


Ваш баг: Project* project = [[Project alloc] init];

@dynamic сеттеры и геттеры не создаются для вас, если вы создаете свой объект таким образом.
Вы не можете использовать NSManagedObjects без NSManagedObjectContext.

Вы должны использовать что-то вроде этого:

Project *project = (Project *)[NSEntityDescription insertNewObjectForEntityForName:@"Project" inManagedObjectContext:self.managedObjectContext];
0 голосов
/ 08 марта 2011

Имена свойств с подчеркиванием не очень разумны в мире Objective C. Я полагаю, что свойства, созданные Core Data, имеют неправильные имена. Попробуйте использовать CamelCase, который вызывает ваши свойства userID, itemOrder, cacheCount и т. Д.

0 голосов
/ 08 марта 2011

Возможно, вам придется настроить ваши геттеры и сеттеры.

Это может быть так просто, как добавление: @synthesize user_id;

В вашем файле класса.

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