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: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];

}];

}];

时间: 2024-10-29 03:14:23

MagicalRecord使用中的注意事项的相关文章

electron 使用中的注意事项

一.ELECTRON引用JQUERY.JS electron不能像正常的html文件引用jq.js那样(为嘛不造),elecron引用jq.js的方式为: <script>window.$ = window.jQuery = require('jquery.js');</script> 二.ELECTRON跟JS之间的通信 他们之间不能直接通信,需要使用ipc来实现通讯.例: //发信方 var ipc = require('ipc'); ipc.send('isMessage')

oracle Imp和exp以及导入常见的错误

一 1) 数据库对象已经存在 一般情况, 导入数据前应该彻底删除目标数据下的表, 序列, 函数/过程,触发器等; 数据库对象已经存在, 按缺省的imp参数, 则会导入失败 如果用了参数ignore=y, 会把exp文件内的数据内容导入 如果表有唯一关键字的约束条件, 不合条件将不被导入 如果表没有唯一关键字的约束条件, 将引起记录重复 (2) 数据库对象有主外键约束 不符合主外键约束时, 数据会导入失败 解决办法: 先导入主表, 再导入依存表 disable目标导入对象的主外键约束, 导入数据后

String用法大全(转)

转自:http://blog.sina.com.cn/s/blog_9054a03601013d5d.html(虽然这个人也是转的...) 之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够.字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要.我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?).我们尽可以把它看成是C++的基本数据类型. 首先,为了在我们的程

完成端口(Completion Port)详解(转)

手把手叫你玩转网络编程系列之三    完成端口(Completion Port)详解                                                              ----- By PiggyXP(小猪) 前 言 本系列里完成端口的代码在两年前就已经写好了,但是由于许久没有写东西了,不知该如何提笔,所以这篇文档总是在酝酿之中……酝酿了两年之后,终于决定开始动笔了,但愿还不算晚….. 这篇文档我非常详细并且图文并茂的介绍了关于网络编程模型中完成端口的方方

完成端口(CompletionPort)详解

手把手叫你玩转网络编程系列之三    完成端口(Completion Port)详解                                                              ----- By PiggyXP(小猪) 前 言 本系列里完成端口的代码在两年前就已经写好了,但是由于许久没有写东西了,不知该如何提笔,所以这篇文档总是在酝酿之中--酝酿了两年之后,终于决定开始动笔了,但愿还不算晚-.. 这篇文档我非常详细并且图文并茂的介绍了关于网络编程模型中完成端口的方方

en_windows_10_multiple_editions_version_1511_x64.iso

好久没折腾电脑了,这几天在E盘装了个64位Windows 10 TH2 专业版,从MSDN官网下载的英文原版镜像,用kms10未能激活,一看日志文件,说我这是零售版,后面就关掉了什么监听端口,然后就完事了.slmgr /xpr 显示windows is in notification mode, 再看系统信息, 显示无法连接激活服务器.今天换了个激活软件终于激活,看了一下任务计划里面,每分钟执行一次那个激活程序,这样就保持一直激活,而不再是180天后过期.不过每分钟激活一次,至于这样吗? 想把计

完毕port(CompletionPort)具体解释 - 手把手教你玩转网络编程系列之三

手把手叫你玩转网络编程系列之三    完毕port(Completion Port)具体解释                                                              ----- By PiggyXP(小猪) 前 言 本系列里完毕port的代码在两年前就已经写好了,可是因为许久没有写东西了,不知该怎样提笔,所以这篇文档总是在酝酿之中--酝酿了两年之后,最终决定開始动笔了,但愿还不算晚-.. 这篇文档我很具体而且图文并茂的介绍了关于网络编程模型中完毕

完成端口————留着看

[置顶] 完成端口(CompletionPort)详解 - 手把手教你玩转网络编程系列之三 分类: VC网络编程基础2011-11-01 08:17 75535人阅读 评论(366) 收藏 举报 网络编程socketnull服务器windows 手把手叫你玩转网络编程系列之三    完成端口(Completion Port)详解                                                              ----- By PiggyXP(小猪) 前

07讲 总线的使用方法

1.放置总线 2.放置任意转角的总线 3.总线命名规则 有意义字母+[0:N],e.g  ED[0:31] 4.把信号连接到总线 5.重复放置与总线连接的信号线 可以使用快捷键F4 6.总线使用中的注意事项 放置总线的分支,可以使用 分支网络命名必须与总线名保持一致,再在后面添加数字编号,如图.添加好一条后再按住crtl键,可以复制,或者直接按F4,但是有一个bug,必须先添加总线的一条总线分支,才可以使用F4重复添加. 7.添加多页面之间的连接