Tag: 核心数据

在使用UIManagedDocument的Xcode 4.5的iPhone模拟器5.1中的错误

我有一个非常奇怪的问题,我花了两天的时间来解决…我有一段代码在Xcode 4.4和iOS 5.1 Simulator上使用5.1 SDK工作得很好。 在我更新到Xcode 4.5和6.0 SDK后,我的代码在iOS 5.1 Simulator中停止工作,即使它在iOS 6.0 Simulator中工作得非常好。 有没有我没有意识到的变化? 这是代码: – (void)useDocument { if (![[NSFileManager defaultManager] fileExistsAtPath:[self.database.fileURL path]]){ [self.database saveToURL:self.database.fileURL forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success){ [self setupFetchedResultsController]; }]; } else if (self.database.documentState == UIDocumentStateClosed){ [self.database openWithCompletionHandler:^(BOOL success){ [self setupFetchedResultsController]; }]; } else if (self.database.documentState == UIDocumentStateNormal) { [self setupFetchedResultsController]; } } 出于某种原因,saveToURL和openWithCompletionHandler永远不会在5.1模拟器中返回。 任何人都知道为什么?

如何浏览在我的iPhone上运行的应用程序中的核心数据?

我正在开发一个使用核心数据的iPhone项目,并试图找出一种轻松浏览数据如何存储的方法。 具体而言,我将图像存储在核心数据中,并希望看到它们占用了多less空间等等。 我发现了一个名为“核心数据编辑器”的应用程序,可以让您在iPhone模拟器上浏览核心数据,但是对我来说这并不是很有用,因为我正在存储从相机拍摄的图像。 有没有办法轻松浏览我的应用程序中存储的内容?

删除sqlite的WAL文件是否安全?

在iOS应用程序中,Core Data有一个奇怪的问题,WAL文件有时会变得很大 (〜1GB)。 看来还有其他人有这个问题(例如, 当插入〜5000行时,Core Data的sqlite-wal文件会获得MASSIVE(> 7GB) )。 我最初的想法是在应用程序启动时删除WAL文件。 从阅读关于此事的sqlite文档看来,这将是好的。 但是,有没有人知道这样做的缺点? 我当然想深入了解WAL文件为什么会变得如此之大,但是我现在还不能深究,并且想深入研究这个问题。 值得指出的是我的Core Data数据库更像是一个caching。 因此,如果我丢失了WAL中的数据,这并不重要。 我真正需要知道的是,如果我删除WAL,数据库是否会完全损坏? 我的怀疑是否定的,否则WAL不符合其目的之一。

删除核心数据版本xcdatamodel文件

我已经在我的iOS应用程序中创build了一个版本化的核心数据模型,并且有几个版本创build到目前为止(.xcdatamodeld包中的几个.xdatamodel文件)。 在发布应用程序之前,我正在考虑删除这些旧版本,这样我就可以从一个简单的数据模型开始 – 在这个阶段数据丢失不是问题。 这可能吗? 如果不简单地删除所有Core数据文件并重新创build一个新模型,最好的办法是实现这个目标。

使核心数据线程安全

长话短说,我厌倦了与NSManagedObjectContext相关的荒谬的并发规则(或者说,它完全不支持并发性,倾向于爆炸或做其他不正确的事情,如果你试图跨线程共享一个NSManagedObjectContext ),我试图实现一个线程安全的变体。 基本上我所做的是创build一个跟踪它创build的线程的子类,然后将所有方法调用映射回该线程。 这样做的机制有点复杂,但其关键是我有一些帮助方法,如: – (NSInvocation*) invocationWithSelector:(SEL)selector { //creates an NSInvocation for the given selector NSMethodSignature* sig = [self methodSignatureForSelector:selector]; NSInvocation* call = [NSInvocation invocationWithMethodSignature:sig]; [call retainArguments]; call.target = self; call.selector = selector; return call; } – (void) runInvocationOnContextThread:(NSInvocation*)invocation { //performs an NSInvocation on the thread associated with this context NSThread* currentThread = [NSThread currentThread]; […]

核心数据:以任何方式来获取多个实体?

我刚刚开始使用核心数据,作为一个学习练习,我正在构build一个应用程序,我需要在单个表视图中显示不同types的对象。 举一个例子,假设我有一个“奶酪”实体和一个“海盗”的不相关实体。 在我的应用程序的主屏幕上,用户应该能够创build一个“奶酪”或“海盗”实例添加到表视图。 因此,使用核心数据编辑器,我已经为Cheese和Pirate创build了实体…但是,NSFetchRequest似乎只允许您一次检索一种types的实体: NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"Cheese" inManagedObjectContext:_context]; [fetchRequest setEntity:entity]; 有没有办法执行一个检索所有“奶酪”和“海盗”对象的提取? 谢谢。

是否有可能只提取核心数据查询中选定的属性

我有(我猜)典型的问题。 我的核心数据数据库包含表,其中有BLOB字段和相当长的文本字段。 通常我不需要加载这些大尺寸的字段。 由于数据库中有数千条logging,我宁愿只取数据。 换句话说,我想使“SELECT name,id FROM TAB_NAME”查询,而不是“SELECT * FROM TAB_NAME”查询。 有没有办法只使用核心数据提取选定的字段? 或者我应该寻找其他的select,例如,把大的字段分隔到另一个表格上? 也许有更好(更简单)的方法来做到这一点? 我习惯于使用Hibernate或者JPA,在上面的操作中很容易做到,在通过Core Data docs之后,我没有看到这样的选项。

核心数据 – 轻量级迁移和多核心数据模型文件(xcdatamodel)

从两个单独的xcdatamodel文件定义的存储迁移时,执行轻量级迁移时遇到问题。 在我的应用程序的1.0版中,我将模型分解为分析模型,模型-A和模型-B中的所有其他模型。 编译时,模型将被分组在一起,一切进展顺利。 在使用新版本1.1时,我通过向模型B添加新模型版本并将新版本设置为活动状态来升级模型B. 从1.0升级到1.1时出现问题。 看来Core Data检查磁盘上的模型存储(由版本1.0创build),并寻找描述它的模型,但无法find定义整个商店的SINGLE模型(模型-A仅涵盖分析,模型-B覆盖一切),所以它会抛出一个“无法find源存储模型”的错误。 有没有人find一个解决scheme来分离模型,但仍然允许升级+轻量级迁移工作,没有定义自定义迁移额外的麻烦? 以下是用于加载模型的代码片段: NSArray *modelNames = [NSArray arrayWithObjects:@"model-A", @"model-B", nil]; NSMutableArray *models = [NSMutableArray array]; for (NSString *name in modelNames) { LogInfo(@"loading model %@", name); NSURL *modelURL = [[NSBundle mainBundle] URLForResource:name withExtension:@"momd"]; NSManagedObjectModel *model = [[[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL] autorelease]; [models addObject:model]; } // combine all the separate models into […]

好的教程或在IOS 7中使用Core.Data

我一直在尝试使用这个教程 。 但我希望它被保存在主线程以外的线程中。 到目前为止,我无法得到上面的教程工作? 我也试过这个 有任何想法吗?

NSManagedObject子类属性的类别

NSManagedObject的子类属性是在其类别文件中创build的,因为类只能有方法,所以非常有线。 详情如下: (1)。我在.xcdatamodeld文件中创build了一个名为BibleAudio的实体,具有以下几个属性。 (2)。 xcode生成的目标c文件是“BibleAudio + CoreDataProperties.h”,“BibleAudio + CoreDataProperties.m”和“BibleAudio.h”,“BibleAudio.m”如下: (3)。 在“BibleAudio + CoreDataProperties.h”中,BibleAudio的属性在这里被声明为属性(见下文); 而在“BibleAudio.h”中则是空的。 据我所知,“BibleAudio + CoreDataProperties.h”是一个类别文件,只能在这里声明方法。 因此,我认为正确的方法是在“BibleAudio.h”中声明属性,如果你想为这个NSManagedObject子类添加方法,你应该使用一个类别来添加该方法。 BibleAudio + CoreDataProperties.h BibleAudio.h 有人知道我的理解是对的吗? 或者如果我错了,那背后的逻辑是什么?