2014-02-12 75 views
7

我會盡量公開我的問題,因爲有點複雜。 我使用核心數據和我存儲的數據有問題。 當我使用此代碼:CoreData insertNewObjectForEntityForName和executeFetchRequest返回nil

NSManagedObjectContext *context = [appDelegate managedObjectContext]; 
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"ItemMessage"]; 
NSError *error = nil; 
NSArray *results = [context executeFetchRequest:request error:&error]; 
NSMutableArray *values = [[NSMutableArray alloc] init]; 

if (error == nil) { 
    for (int i = 0; i<results.count; i++) { 
     NSLog(@"results %@",[results objectAtIndex:i]); 
     ItemMessage *itemMessage = [results objectAtIndex:i]; 
     [values addObject:itemMessage]; 
    } 

ecc。問題是由NSLog打印的值是正確的(「結果」包含某些內容),但itemMessage始終包含0個鍵/值對(它看起來是空的)。 要了解什麼是我回去,看到在insertNewObjectForEntityForName我也有這個問題的問題,這是我以前當我保存在核心數據消息數據的代碼:

for (id key in objectMessage) { 
    ItemMessage *itemmessage = [[ItemMessage alloc] init]; 
    itemmessage.itemMessageId = [key objectForKey:@"itemMessageId"]; 
    itemmessage.message = [key objectForKey:@"message"]; 
    itemmessage.sender = [key objectForKey:@"sender"]; 
    itemmessage.users = [key objectForKey:@"users"]; 

    NSManagedObjectContext *context = [appDelegate managedObjectContext]; 
    NSManagedObject *newMessage; 
    newMessage = [NSEntityDescription insertNewObjectForEntityForName:@"ItemMessage" inManagedObjectContext:context]; 
    [newMessage setValue: itemmessage.itemMessageId forKey:@"itemMessageId"]; 
    [newMessage setValue: itemmessage.message forKey:@"message"]; 
    [newMessage setValue: itemmessage.sender forKey:@"sender"]; 
    [newMessage setValue: itemmessage.users forKey:@"users"]; 
    [context save:&error]; 
    if (error != nil) { 
     NSLog(@"Coredata error"); 
    } 

的問題是在insertNewObjectForEntityForNamesetValue之後的newMessage也包含0個鍵/值對。 你能幫我嗎?

回答

3

你似乎並不正確地插入新的管理對象進上下文。
它應該是:

for (id key in objectMessage) { 
    NSManagedObjectContext *context = [appDelegate managedObjectContext]; 
    ItemMessage *itemmessage = (ItemMessage*)[NSEntityDescription insertNewObjectForEntityForName:@"ItemMessage" 
                      inManagedObjectContext:context]; 
    itemmessage.itemMessageId = [key objectForKey:@"itemMessageId"]; 
    itemmessage.message = [key objectForKey:@"message"]; 
    itemmessage.sender = [key objectForKey:@"sender"]; 
    itemmessage.users = [key objectForKey:@"users"]; 
} 
//save your inserts 

要針對管理對象來創建一個類文件,你可以:

轉到您的模型文件(xcdatamodeld) - >
選擇一個實體 - >
從菜單中選擇:
Editor->創建NSManagedObjectSubclass - >選擇您喜歡的類文件的實體。

現在您將擁有可以輕鬆訪問的託管對象(NSManagedObject子類)並受益於CoreData功能。

+0

這不是我的問題,只是我沒有包含部分代碼。現在我編輯了這篇文章,並編寫了所有的代碼! – Anna565

+0

什麼是'ItemMessage'(它是一個管理對象)?你爲什麼需要它?你的管理對象是如何定義的? –

+0

ItemMessage是一個Coredata實體,在xcdatamodeld中定義,也是一個具有相同名稱的模型(一個NSObject類) – Anna565

2

當您插入管理你要調用保存對象的較量:方法,還保存方法應該看起來就像這樣:

newMessage = [NSEntityDescription insertNewObjectForEntityForName:@"ItemMessage" inManagedObjectContext:context]; 
// 2 
    newMessage.property1 = self.firstNameTextfield.text; 
    newMessage.property2 = self.lastNameTextfield.text; 

if (![context save:&error]) { 
    NSLog(@"Error: %@", [error localizedDescription]); 
    } 
+0

謝謝,但我沒有包含部分代碼。當然,我設置newMessages值(例如)[newMessage setValue:itemmessage.message forKey:@「message」];最後我用[context save:&error]保存; 保存不會給出任何錯誤。 – Anna565

+0

您可以在設置屬性的位置顯示該代碼並保存它。 – Greg