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

}];

}];

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

  1. 在Android中使用am和input命令在实际使用中的注意事项以及小技巧

    在Android使用到am和进行一些操作是非常方便的,比如一个重复自动的操作,具体用来实现一些什么是看个人需求了,接下来说对于am和input的使用. 本文适用于已经大概去了解了am和input的朋友 ...

  2. electron 使用中的注意事项

    一.ELECTRON引用JQUERY.JS electron不能像正常的html文件引用jq.js那样(为嘛不造),elecron引用jq.js的方式为: <script>window.$ ...

  3. SQLFlow使用中的注意事项--设置篇

    SQLFlow 是用于追溯数据血缘关系的工具,它自诞生以来以帮助成千上万的工程师即用户解决了困扰许久的数据血缘梳理工作. 数据库中视图(View)的数据来自表(Table)或其他视图,视图中字段(Co ...

  4. [MFC美化] Skin++使用详解-使用方法及注意事项

    主要分为以下几个方面: 1.Skin++使用方法 2.使用中注意事项 一. Skin++使用方法 SkinPPWTL.dll.SkinPPWTL.lib.SkinPPWTL.h ,将三个文件及相应皮肤 ...

  5. 转载:C语言指针使用的注意事项

    相信大家对指针的用法已经很熟了,这里也不多说些定义性的东西了,只说一下指针使用中的注意事项吧. 一.在定义指针的时候注意连续声明多个指针时容易犯的错误,例如int * a,b;这种声明是声明了一个指向 ...

  6. c++字符串

    之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够.字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至 ...

  7. en_windows_10_multiple_editions_version_1511_x64.iso

    好久没折腾电脑了,这几天在E盘装了个64位Windows 10 TH2 专业版,从MSDN官网下载的英文原版镜像,用kms10未能激活,一看日志文件,说我这是零售版,后面就关掉了什么监听端口,然后就完 ...

  8. IOCP入门

    完成端口(Completion Port)详解 此文讲解最好,也很全面一下其他文章看看就行,也可不看. 单句柄数据,单IO数据 此文讲述比较清晰,可以辅助理解上文. IOCP编程之基本原理:http: ...

  9. c++字符串变量---8

    原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/ 一.字符串变量的定义 1>.对于C与C++来说是没有字符串型的数据类型的,在C++中是通过包含st ...

随机推荐

  1. hibernate原生sql封装,报错信息:could not find setter for rownum_

    今天用hibernate的时候,用了一个原生态sql做了一个分页查询,结果就报错了... 找到解决方法了:http://shmily2038.iteye.com/blog/1704963

  2. mysql RC下不存在则插入

    mysql版本:5.7 目的:在RC下,name列上仅有key索引,并发插入name时不出现重复数据 RC不加gap lock,并且复合select语句是不加锁的快照读,导致两个事务同时进行都可插入, ...

  3. after_create and after_commit

    A relational database, like mysql, provides transactions to wrap several operations in one unit, mak ...

  4. 解决启动mongod 时,出现addr already in use错误

    启动mongod   root@wangyuyu-Vostro-1440:/usr/bin# ./mongod 错误提示: Sat Aug 17 09:02:02 [initandlisten] ER ...

  5. APP消息推送机制的实现(PUSH)

    出于好奇,想了解一下消息推送机制,在网上搜索到了几篇文章,感觉还不错,粘贴下来,等真正用到的时候再仔细研究 以下两篇是关于ios的 1.http://blog.csdn.net/xyxjn/artic ...

  6. input属性type为file打开文件资源管理器时,如何限制多次选取或只能一次选取的行为

    1.input标签没有设置multiple属性,文件资源管理器默认一次选取 <!doctype html> <html lang="en"> <hea ...

  7. VM CentOS7 网络配置问题汇总

    0. 前言 在进行配置之前,我们首先需要明确几个概念: I. VM的网络连接方式 ①. 桥接模式(Bridge)   此模式下,VM centOS 在网络中作为一台独立主机存在,它可以访问网络中的任何 ...

  8. javaScript中用eval()方法转换json对象

    var u = eval('('+user+')'); 1.对于服务器返回的JSON字符串,如果jQuery异步请求没做类型说明,或者以字符串方式接受,那么需要做一次对象化处理,方式不是太麻烦,就是将 ...

  9. C学习笔记(1)-结构体、预处理与多文件结构程序设计

    一.结构体的定义与使用 #include <stdio.h> //定义结构体(类似模板) typedef struct { char name[50]; int age; char add ...

  10. 【转】通过CountDownLatch提升请求处理速度

    countdownlatch是java多线程包concurrent里的一个常见工具类,通过使用它可以借助线程能力极大提升处理响应速度,且实现方式非常优雅.今天我们用一个实际案例和大家来讲解一下如何使用 ...