sqliteMagicalRecord使用着之注意事项

MagicalRecord使用受到的注意事项

sqlite 1

 

使用CoreData [1]

使用CoreData [2]

使用CoreData [3]

使用CoreData [4]

使用MagicalRecord操作CoreData

 

用bundle中的CoreData相关文件复制到沙盒目录中并以

复制这三单文件

sqlite 2

下一场据此单例初始化

//
//  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:srcPath
                                                    toPath:dstPath
                                                     error: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:srcPath
                                                    toPath:dstPath
                                                     error: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:srcPath
                                                    toPath:dstPath
                                                     error: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];

        }];

    }];

 

 

 

 

网站地图xml地图