操作CoreData 常見的錯誤及解決方法
阿新 • • 發佈:2019-02-02
. 使用Core Data時Model Class的定義:
- property必須是Objective C的物件型別,必須宣告為nonatomic & retain或 nonatomic ©
- 在.m檔案中accessor方法用@dynamic, refenrence裡面是strongly recommend這樣用的
- 如果property是數字,用NSNumber *,呼叫的時候再換成需要的型別。
- 例如 cell.text = [NSNumber stringValue: (NSNumber *)];
2. 修改.xcdatamodel檔案引起的Exception
- 如果在程式已經執行過的情況下更改了.xcdatamodel檔案,原有資料庫就作廢了,所以無論怎麼除錯都會出現exception。一般console裡面會提示NSPersistentStoreCoordinator has no persistent stores.
- 解決方法:找到.sqlite,然後刪掉,重新執行。.sqlite檔案在Library/Application
Support/iPhone Simulator/User/Applications/(一堆數字,點進去會看見project名)/Documents/
3. 所有跟text有關的UI類的setText方法只能用NSString,否則會有warning,如果不管這個warning執行時會exception.
4. 如何除錯EXE_BAD_ACCESS
5. unrecognized selector sent to instance xxxx
- 造成unrecognized selector sent to instance iphone,大部分情況下是因為物件
- 解決方法:檢查release和init
6. Can’t merge models with two different entities named xxxx
- 修改了Core Data的資料模型後,因為版本問題出現的Exception
- 解決辦法:Build —>clear all target
7. could not locate an NSManagedObjectModel for entity name
- managedObjectContext沒有初始化,所以無法讀取model的值
- 除錯方法:將appDelegate的context傳給viewController前,要將viewController的context初始化,囧囧是寫在initWithNibName裡的
8.UITableView的資料來源排序為降序時,記得CellForRowAtIndexPath裡面不要用if(Cell ==nil)的條件去掉,否則資料更新會錯。。。
9. 使用Core Data時,實體類的relationship在fetch的時候只作為fault被呼叫
fault是為了保證模型完整的一種東西,比如說A有個relationship ,這個關係的目標是B,那fetch A的時候,B只是個fault,你是無法訪問B的屬性的,因為B根本沒被fetch ,下面是囧囧的解決方法,也不知道對不對,哈哈哈哈- -
[fetchRequest setReturnsObjectsAsFaults:NO];