2013-02-26 62 views
1

我對核心數據的邏輯感到困惑。iOS核心數據 - 爲什麼它有效?

我將核心數據視爲數據庫,將核心數據視爲SQL查詢。

當我試圖與本地存儲的對象核心數據更新一些對象,我發現我可以使功能只需用下面的代碼:

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
[request setEntity:[NSEntityDescription entityForName:@"Book" inManagedObjectContext:_managedObjectContext]]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"identifier == %@", theBook.identifier]; 
[request setPredicate:predicate]; 

NSError *error; 
Book *book = [[_managedObjectContext executeFetchRequest:request error:&error] lastObject]; 
if (error) { 
    NSLog(@"Error getting book to update: %@", error); 
    abort(); 
} 

// NSLog(@"%d", book == theBook); 

error = nil; 
if (![_managedObjectContext save:&error]) { 
    NSLog(@"Error saving the book: %@", error); 
    abort(); 
} 

theBook是我想更新的對象核心數據的對象。

而且我發現日誌消息說,這兩名對象是一樣的...

我拿來的要求,並沒有做任何事情,但它的作品。它爲什麼有效?

+0

我發現它在我僅使用代碼的保存部分時有效。我認爲這是因爲'theBook'也是取回的結果。 – glast 2013-02-26 06:42:12

+0

你的問題根本不清楚。我看不出爲什麼它不起作用。 – 2013-02-26 06:44:34

+0

當我將核心數據作爲數據庫處理時,我認爲我應該(1)從獲取請求中獲取對象並(2)編輯對象的值以及(3)然後保存。但是,當我省略過程(1)和(2)時,它會起作用。我不是本地英文用戶,所以很難解釋我的問題。對不起:) – glast 2013-02-26 06:48:36

回答

1

首先核心數據不是數據庫 - 它是一個對象圖,可以保存到某種存儲中。 如果您的對象中有唯一的identifier,那麼使用相同的identifier值獲取相同的對象。核心數據不會爲同一個實體創建不同的管理對象實例(比如說標識符爲7的書籍),所以無論你在哪裏處理同一個對象,如果你獲取它15次都沒關係,你總是會結束與同一個。

+0

這對我很有幫助。我誤解了核心數據。 – glast 2013-02-26 07:00:45