2015-07-06 125 views
0

我有一個Core Data實體,稱爲狀態有兩個屬性savedMessageID作爲位整數和savedMessageText爲String。難度寫數值回核心數據

我有一個字符串存儲在應用程序在啓動時下載的SQL數據庫中。從數據庫中的字符串分解成兩個部分ID和文本:

NSInteger *newMessageID = [the_ID_as_a_string integerValue]; 
    NSString *newMessageText = the_message_as_a_string; 

我再讀取核心數據記錄和比較的ID,看看是否出現了變化。如果下載的ID大於存儲的ID,則顯示新消息。到目前爲止,這工作得很好。

然後我嘗試寫回到核心數據與新的下載的ID。這裏的問題是......人們經常談論的就到這裏我已經知道:

NSEntityDescription *entitydesc = [NSEntityDescription entityForName:@"Status" inManagedObjectContext:context]; 
NSManagedObject *updatedStatus = [[NSManagedObject alloc]initWithEntity:entitydesc insertIntoManagedObjectContext:context]; 
[updatedStatus setValue:newMessageID forKey:@"savedMessageID"]; //**error line** 
[updatedStatus setValue:newMessageText forKey:@"savedMessageText"]; 
NSError *error; 
[context save:&error]; 

看來我不能寫回的NSIntegerCore Data。我已經嘗試編寫NSNumber,int等,但所有這些標誌問題。任何想法我應該怎麼做?

**我得到的錯誤是不Objective-C的指針NSInteger的*「(又名」詮釋「)到‘身份證’的*隱式轉換是不允許與ARC

+0

您收到的實際錯誤是什麼? –

+0

NSInteger只是一個int類型(在LP64 arch中是很長的),所以如果你通過核心數據如何將其解釋爲NSNumber的地址以外的任何東西?這就是它的工作原理......當你從另一個上下文中讀取時,你得到了什麼錯誤,是否保存失敗,或者是否獲得了你不期望的值? –

+0

錯誤是 - 將非Objective-C指針隱式轉換爲NSInteger *'(aka'int *')爲'id'不允許使用ARC – RGriffiths

回答

3

你讓一個失誤。屬性[the_ID_as_a_string integerValue]返回整數值,而不是指向它的指針。正確的是:

NSInteger newMessageID = [the_ID_as_a_string integerValue]; 

,然後設定值(預期爲NSNumber的):

[updatedStatus setValue:@(newMessageID) forKey:@"savedMessageID"]; 

[updatedStatus setValue:[NSNumber numberWithInteger:newMessageID] forKey:@"savedMessageID"]; 

我建議你產生嚴格的模型,以避免類型不匹配(見的答案在這裏How to create classes after creating Core Data model in Xcode for iPhone)。

+0

恐怕我不明白。我想我會想要整數值而不是指針。此外numberFromInteger似乎並不存在我。你是否建議核心數據期望NSNumber類型被寫回? – RGriffiths

+0

它是'[NSNumber numberWithInteger:]' - 我的錯誤。看起來你沒有閱讀Apple的文檔。 NSNumber是有據可查的。此外,如果你輸入'[NSNumber number' - Xcode會建議你正確的方法 - 看看它們。 CoreData期望嵌入在NSNumber中的數值,但是如果你創建了模型類,你可能已經輸入了屬性。 –

+0

現在明白了 - 謝謝。作品一種享受。我確實讀過蘋果文檔,但是這篇文章讓我難住了。乾杯。 – RGriffiths