MagicalRecord使用中的注意事项

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-08-30 13:38:09

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

消息队列在使用中的注意事项

消息队列在使用中的注意事项 异步不是万能的,实现异步重要的手段,消息队列在使用中也是有很多注意事项的. 消息队列的瓶颈 消息队列至少有三处容易出现瓶颈,我们一经典的发布/订阅模式为例.分析一下都可能存在哪些瓶颈. 发布 ---> 队列 ---> 订阅 入队瓶颈,发布消息队列,处理太慢,发布端堵塞应用程序. 队列持久化瓶颈,队列持久化是需要写入磁盘的,大量的密集IO操作 出队瓶颈,(茶壶煮饺子,有嘴倒不出)出队瓶颈还包括订阅端的处理能力, 如果订阅端的处理能力跟不上,也会出现瓶颈. 消息大小,每

.NET数组使用中的注意事项小结_实用技巧

本文分析了.NET数组使用中的注意事项.分享给大家供大家参考.具体分析如下: 1.初始值问题 对于int.double.float等一些值类型数组,没有赋值的情况下, 默认值是0: 而对于String 等引用类型,初始值为null. 2.IndexOutOfRangeException 数组下标越界,要保证数组下标>Length. 3.数组不能动态增加大小! 但ArrayList 和 List<>可以. 希望本文所述对大家的.NET程序设计有所帮助.

移动硬盘使用中常见问题

移动硬盘现在已经成为常用的存储设备,其便携性非传统的存储设备可以相比,但朋友们在使用过程中,可能遇到多种问题,现在就这些常见的问题,谈谈自己的解决方法,希望对朋友们有帮助. 一.移动硬盘的识别 1.USB接口未开启.这种情况一般出现在一些稍老的机器上.这些机器上虽然有USB接口,但在BIOS中却是默认关闭的.这样即使系统支持也不不能识别. 开启方法:启动电脑时按住DEL键,进入BIOS设置,在"Chipset Features Setup"-"Integrated Perip

Oracle数据库备份策略的相关概念及使用

这篇论坛文章主要介绍了Oracle数据库备份策略的相关概念及使用中的注意事项,详细内容请大家参考下文 一.了解备份的重要性 可以说,从计算机系统出世的那天起,就有了备份这个概念,计算机以其强大的速度处理能力,取代了很多人为的工作,但是,往往很多时候,它又是那么弱不禁风,主板上的芯片.主板电路.内存.电源等任何一项不能正常工作,都会导致计算机系统不能正常工作.当然,这些损坏可以修复,不会导致应用和数据的损坏.但是,如果计算机的硬盘损坏,将会导致数据丢失,此时必须用备份恢复数据. 其实,在我们的现实

C#4.0初探:Optional and named parameters

Optional and named parameters特性在有些场合提供很大的方便,特别是Office开发中可以告别一坨System.Reflection.Missing了.这里简单了解一下C#4.0中的Optional and named parameters. 在VS2010 CTP中的C#4.0编译器调试通过,正式版可能会有些变化. 1.使用示例 class Program { static void Main(string[] args) { Test t = new Test();

完成端口(CompletionPort)详解 - 手把手教你玩转网络编程系列之三

转载自 PiggyXP(小猪) 完成端口(CompletionPort)详解 - 手把手教你玩转网络编程系列之三 手把手叫你玩转网络编程系列之三    完成端口(Completion Port)详解                                                              ----- By PiggyXP(小猪) 前 言         本系列里完成端口的代码在两年前就已经写好了,但是由于许久没有写东西了,不知该如何提笔,所以这篇文档总是在酝酿之中

exp/imp 与 expdp/impdp 对比

原文转自:http://blog.csdn.net/tianlesoftware/article/details/6093973 一. exp/imp 与 expdp/impdp 对比  1.1 expdp/impdp调用Server端的API在执行操作,是数据库内部的job任务.可以远程使用,但是生成的dump 文件存在于服务器上的directory里.   1.2  exp/imp 与 expdp/impdp 的默认模式和原理不一样   1.2.1 exp/imp 不同模式原理 在metal

C 和 C++字符串详解

From:http://blog.csdn.net/fenxinzi557/article/details/51457829 From:http://www.cnblogs.com/xFreedom/archive/2011/05/16/2048037.html CPP  之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够.字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要.我们可以

Python Yield Generator详解

本文将由浅入深详细介绍yield以及generator,包括以下内容:什么generator,生成generator的方法,generator的特点,generator基础及高级应用场景,generator使用中的注意事项.本文不包括enhanced generator即pep342相关内容. generator基础 在python的函数(function)定义中,只要出现了yield表达式(Yield expression),那么事实上定义的是一个generator function, 调用这