2012-06-14 35 views
0

保存上下文时出现此问题。这是间歇性的。有一半时间,上下文正确保存,其中一半成员对象成为空(实际上上下文中没有任何内容。)ManagedObjectContext保存导致NSManagedObject数据损坏/失效

“mylist”是NSManagedObject的列表,属于上下文中的上下文。其中我节省“结果”始终是YES,因而没有错误

// prints out results before save 
    for (MyObj* obj in mylist) { 
     NSLog(@"%p, %@", obj, [obj message]); 
    } 

    //context save here 
    NSError *error; 
    BOOL result = [[[Core appDelegate] managedObjectContext] save:&error]; 
    if (!result) { 
     NSLog(@"Save Failed!"); 
     NSLog(@"report: %@, %@, %@", error, [error userInfo],[error localizedDescription]); 
    } else { 
     NSLog(@"Save succeeded"); 
    } 

    // prints out results after save 
    for (MyObj* obj in mylist) { 
     NSLog(@"%p, %@", obj, [obj message]); 
    } 

控制台显示是这样的:

0x9af6990, message0 
    0x9af8910, message1 
    0x9afa390, message2 
    0x9afa5a0, message3 
    Save succeeded 
    0x9af6990, (null) 
    0x9af8910, (null) 
    0x9afa390, (null) 
    0x9afa5a0, (null) 

我也试着从上下文重复获取,和我在保存之后得到0个对象,这一切都在主要部分完成读。有任何想法吗?我真的很难在这一点上。

+0

如何声明MyObj.message? –

+0

MyObj.message返回[self valueForKey:@“msg”],而msg是xcode数据模型中的字符串。 – statguy

回答

1

也许你应该遵循苹果的建议,在许多代码示例中演示,并在获取和设置子类NSManagedObject的属性时使用通常的模式。您应该在@interface中声明@properties,并使用@dynamic自动完成设置/获取。

@interface MyObj : NSManagedObject 
@property (nonatomic, retain) NSString * message; 
@end 

@implementation MyObject 
@dynamic message; 
@end 

如果您需要自定义访问器,只需重写(NSString *)message在您的实现。