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. 使用aapt解析apk,得到package内容

    $cmd = C('APPT_PREFIX'); exec(C('APPT_PREFIX') . UPLOAD_RES_PATH . $up_az, $out, $return); && ...

  2. .Net Core全球化多语言

    参照:ASP.NET Core 全球化和本地化 步骤如下: 后台中的本地化. Startup.cs中注册服务并制定Resource文件的位置.注意:这里的位置不仅仅应用到Web层,如Infrastru ...

  3. Java指定保留小数位数的方法

    package com.qiyuan.util; import java.math.BigDecimal; import java.math.RoundingMode; import java.tex ...

  4. 【LeetCode题解】9_回文数(Palindrome-Number)

    目录 9_回文数(Palindrome-Number) 描述 解法一:转化为字符串的比较 思路 Java 实现 Python 实现 复杂度分析 解法二:反转数字的后半部分 ★ 思路 Java 实现 P ...

  5. 安装ftp服务

    1.首先判断你服务器上是否安装了vsftpd 2.安装vsftpd 3.配置文件/etc/vsftpd/vsftpd.conf 禁止匿名用户登录,把YES改为NO,默认为YES 限制ftp用户跳出家目 ...

  6. Jquery 筛选选择器

    筛选选择器(方法) 既然是方法 那就应该对象调用   obj.metch(); $(“.dd”).children("ul"),show();           //找到.dd下 ...

  7. js如何判断IE浏览器的版本包括IE11

    IE浏览器真是个坑:从ie6以及以前IE版本,简直就是垃圾,不按照Mozilla国际组织的标准来,乱搞.搞得兼容性很差:   <script type="text/javascript ...

  8. swagger 集成asp.net Core2.1

    首先通过nuget 安装   Swashbuckle.AspNetCore 1.在startup.cs 的configureService services.AddAutoMapper(); serv ...

  9. .net core 2.2 部署CentOS7(5)部署.net core mvc

    目录: .net core 2.2 部署CentOS7(1)安装虚拟机 .net core 2.2 部署CentOS7(2)给虚拟机安装CentOS7 .net core 2.2 部署CentOS7( ...

  10. 19、网络编程 (Socket套接字编程)

    网络模型 *A:网络模型 TCP/IP协议中的四层分别是应用层.传输层.网络层和链路层,每层分别负责不同的通信功能,接下来针对这四层进行详细地讲解. 链路层:链路层是用于定义物理传输通道,通常是对某些 ...