MagicalRecord使用中的注意事项
MagicalRecord使用中的注意事項
?
使用CoreData [1]
使用CoreData [2]
使用CoreData [3]
使用CoreData [4]
使用MagicalRecord操作CoreData
?
將bundle中的CoreData相關文件復制到沙盒目錄中并使用
復制這三個文件
然后用單例初始化
// // GlobalCoreData.h // YXMWeather // // Created by XianMingYou on 15/2/20. // Copyright (c) 2015年 XianMingYou. All rights reserved. // #import <Foundation/Foundation.h> #import "CityCode.h"@interface GlobalCoreData : NSObject+ (void)globalInit;@end // // GlobalCoreData.m // YXMWeather // // Created by XianMingYou on 15/2/20. // Copyright (c) 2015年 XianMingYou. All rights reserved. // #import "GlobalCoreData.h"@implementation GlobalCoreData+ (void)globalInit {GCDGroup *group = [GCDGroup new];if ([@"/Documents/CityCode.sqlite" exist] == NO) {[[GCDQueue globalQueue] execute:^{NSString *srcPath = [@"CityCode.sqlite" bundleFile];NSString *dstPath = [@"/Documents/CityCode.sqlite" path];[[NSFileManager defaultManager] copyItemAtPath:srcPathtoPath:dstPatherror:nil];} inGroup:group];}if ([@"/Documents/CityCode.sqlite-shm" exist] == NO) {[[GCDQueue globalQueue] execute:^{NSString *srcPath = [@"CityCode.sqlite-shm" bundleFile];NSString *dstPath = [@"/Documents/CityCode.sqlite-shm" path];[[NSFileManager defaultManager] copyItemAtPath:srcPathtoPath:dstPatherror:nil];} inGroup:group];}if ([@"/Documents/CityCode.sqlite-wal" exist] == NO) {[[GCDQueue globalQueue] execute:^{NSString *srcPath = [@"CityCode.sqlite-wal" bundleFile];NSString *dstPath = [@"/Documents/CityCode.sqlite-wal" path];[[NSFileManager defaultManager] copyItemAtPath:srcPathtoPath:dstPatherror:nil];} inGroup:group];}[[GCDQueue globalQueue] notify:^{[MagicalRecord setupCoreDataStackWithStoreAtURL:[NSURL fileURLWithPath:[@"/Documents/CityCode.sqlite" path]]];} inGroup:group]; }@end此處要記得設置初始化路徑.
? ? ? ??[MagicalRecord setupCoreDataStackWithStoreAtURL:[NSURL fileURLWithPath:[@"/Documents/CityCode.sqlite" path]]];
?
關于NSManagedObjectContext的一些使用細節
NSManagedObjectContext保存了操作數據庫句柄的一些上下文,在MagicalRecord中,我們有時候會在子線程中進行查詢操作,而到主線程中進行顯示操作.問題來了,在實際使用過程中,操作句柄對象NSManagedObjectContext會在跨線程的過程中丟失掉,也就是說數據變成空了.
這個時候,我們需要將操作句柄NSManagedObjectContext定義成屬性,然后用
[NSManagedObjectContext MR_context]
來獲取出操作句柄并作為屬性存儲起來(防止丟失)
然后,你就可以做你自己想做的炒作了;)
比如以下操作:
? ??[GCDQueue executeInGlobalQueue:^{
? ? ? ? NSPredicate *searchInfo = [NSPredicate predicateWithFormat:@"%@ IN [cd] cityName", textField.text];
? ? ? ? self.magicArray = [CityCode MR_findAllWithPredicate:searchInfo
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? inContext:self.context];
? ? ? ? [GCDQueue executeInMainQueue:^{
? ? ? ? ? ? [self.tableView reloadData];
? ? ? ? }];
? ? }];
?
?
?
?
轉載于:https://www.cnblogs.com/YouXianMing/p/4306289.html
總結
以上是生活随笔為你收集整理的MagicalRecord使用中的注意事项的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS判断是否出现滚动条
- 下一篇: 第五节 suid/ sgid /sbi