获取后,NSManagedObjects的动态属性为null

时间:2012-09-16 12:31:12

标签: ios core-data null nsmanagedobject nsfetchrequest

我的iOS应用中存在Core Data问题。

首先,我的ManagedObject的代码:

@interface MyBook : NSManagedObject
  @property (retain, nonatomic) NSString *book_name;
@end


@implementation MyBook    
  @synthesize book_name;
@end

代码示例:

NSFetchRequest *fr = [NSFetchRequest fetchRequestWithEntityName:@"MyBook"];
fr.predicate = [NSPredicate predicateWithFormat:@"book_name == %@", @"Something"];

NSArray *result = [s.managedObjectContext executeFetchRequest:fr error:&error];

MyBook *book = nil;
if (result.count) {
    book = [result objectAtIndex:0];
    NSLog(@"Updating old book: %@", book);
} else {
    book = [NSEntityDescription insertNewObjectForEntityForName:@"Book"
               inManagedObjectContext:s.managedObjectContext];
    NSLog(@"Creating new book");
    shelf.book_name = // some unique book name is set here
}

NSLog(@"result: %@", book.book_name);

代码基本上......

  • 试图按名称查阅一本书并抓住它。
  • 如果该书尚不存在,请创建一本书并设置书名。
    • 否则,抓住现有的书。

我遇到的奇怪的事情是,当书已经存在时,属性book_name为空。如果创建了对象,book_name将具有我之前设置的字符串。

我认为访问该属性不会导致获取的图书实例出现故障。这可能是[book valueForKey:@"book_name"]工作的原因,之后该属性也被填充了。

我在这里缺少什么?我期待Core Data注意到我正在访问该属性并在内部为我透明地抓取数据。

谢谢

1 个答案:

答案 0 :(得分:2)

Big WHOOPS!

在发布此原始问题后,我意识到我使用的是@synthesize而不是@dynamic

但是,如果其他人在将来遇到这样的影响,我会在这里留下这个问题。 :)