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. Nodejs学习笔记(十五)—Node.js + Koa2 构建网站简单示例

    前言 前面一有写到一篇Node.js+Express构建网站简单示例:http://www.cnblogs.com/zhongweiv/p/nodejs_express_webapp.html 这篇还 ...

  2. Verdi文档路径

    1.echo $VERDI_HOME 2.cd $VERDI_HOME/doc 3.okular VerdiTut.pdf& Verdi主要在以下方面使用 Verdi使用情形:        ...

  3. 数组操作方法中的splice()和concat() 以及slice()

    1.splice()方法是修改Array的'全能方法',它可以从指定的索引开始删除若干元素,然后再从该位置添加若干元素,其中有三个参数(x,y,z) x:从索引x开始操作数组; y:0或不为0,当为0 ...

  4. JS实现年月日三级联动+省市区三级联动+国家省市三级联动

    开篇随笔:最近项目需要用到关于年月日三级联动以及省市区三级联动下拉选择的功能,于是乎网上搜了一些做法,觉得有一些只是给出了小的案例或者只有单纯的js还不完整,却很难找到详细的具体数据(baidu搜索都 ...

  5. UIKit 框架之UITextView

    // // ViewController.m // UItextView // // Created by City--Online on 15/5/22. // Copyright (c) 2015 ...

  6. volatile特性

    volatile保证可见性 一旦一个共享变量(类的成员变量.类的静态成员变量)被volatile修饰之后,那么就具备了两层语义: 1)保证了不同线程对这个变量进行操作的可见性,即一个线程修改了某个变量 ...

  7. elasticsearch java使用

    本文将介绍如何使用java调用elasticsearch的api 1.获取client连接 package com.test.elasticsearch; import java.net.InetAd ...

  8. git 拉取远程分支报错(fatal: '' is not a commit and a branch '' cannot be created from it)

    问题描述从远程git上拉取某一个分支,然后报错,拉取不了这个分支. 拉取分支的命令: git checkout -b xxx-static-19 origin/xxx-static-19 其中xxx- ...

  9. 采用DTO和DAO对JDBC程序进行进一步优化

    采用DTO和DAO对JDBC程序进行进一步优化 DTO:数据传输对象,主要用于远程调用等需要远程调用对象的地方DAO:数据访问对象,主要实现封装数据库的访问,通过它可以把数据库中的表转换成DTO类 引 ...

  10. PL/SQL Developer 和 Instant Client客户端安装配置

    一. 准备工作 1. 点击此下载 PL/SQL Developer 2. 点击此下载 Instant Client 二. 配置Instant Client 1. 新建  %安装目录%\network\ ...