2013-08-07 40 views
1

我正在編寫與服務器通信的應用程序。服務器使用json,所以我把這個json放在我的應用程序中,然後將結果序列化成一個NSMutableDictionary,然後用它來創建一個新的實體。核心數據僅在iOS 5中發生崩潰

這是代碼:

if (context == nil) { 
    context = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
} 

UserTable *ut = [NSEntityDescription insertNewObjectForEntityForName:@"UserTable" inManagedObjectContext:context]; 
ut.user = [Diz objectForKey:@"user"]; 
ut.email = [Diz objectForKey:@"email"]; 
ut.phone = [Diz objectForKey:@"phone"]; 

NSError *error = nil;  
if (![context save:&error]) { 
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);   
} 

所有作品完美的的iOS 4.3,iOS的6.0和6.1。在iOS 5.0.1中,此代碼引發了本地化爲[context save:&error]的exc_bad_Address,或者有時在本地化了ut.phone=[Diz objectForKey:@"phone"]。我只使用一個上下文(我有測試線程組合與「isMainThread」函數),我可以做什麼?我的錯誤日誌是空的,應用程序只是崩潰。

編輯

感謝您的建議。我已經從設備中刪除我的應用,但我會嘗試進行遷移。我已經啓用了異常斷點,但它是一樣的...應用程序崩潰沒有登錄任何錯誤(我也有NsZombie啓用)。在崩潰期間,綠色斷點設置在Entity「UserTable」的一個屬性上,如果我從保存中刪除該屬性,則在保存功能中設置斷點。

編輯

經過很多測試,我已經檢測到這次崩潰的標準行爲。我的實體UserTable有31個屬性,如果我刪除一個屬性都可以正常工作......我已經嘗試用另一個名稱和其他屬性的名稱重新創建實體,但行爲是相同的......這是什麼意思?實體的屬性數有限制嗎?還有其他建議嗎?

+0

您可以嘗試在所有Objective-C崩潰中設置斷點來幫助調試。 –

+0

你是不是要在你調用'insertNewObjectForEntityForName'的地方寫「contesto」或「context」? –

+1

用crashlog更新你的問題 – 0x8badf00d

回答

0

沒有進一步的細節,很難理解發生了什麼。

在此期間的幾點建議。

首先。提供一些有關您的Core Data模型的有用信息。也許,這只是一個假設,你已經改變了模型中的某些東西,現在你需要刪除已經安裝的應用程序或執行遷移。

二。啓用例外以查看發生了什麼在這裏,您可以按照此討論"Run > Stop on Objective-C exception" in Xcode 4?

三。使用camelCase符號。 Diz應該是diz或更明確的名稱,如resultDictionary或任何你想要的。

四,你確定一個上下文是正確的嗎?當你需要從服務器下載大量數據時,UI可能會凍結。

最後,可能會更好地記錄錯誤的日誌。這是什麼意思,這是空的?

+0

感謝您的建議。 – cri1682