2012-06-14 36 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在您的實現。