当我向核心数据模型添加新属性时,我想让我的应用程序能够进行自动轻量级迁移.
在Apple的指南中,这是我能找到的主题的唯一信息:
自动轻量级迁移
要请求自动轻量级迁移,请在addPersistentStoreWithType中传递的选项字典中设置适当的标志:configuration:URL:options:error:.您需要将与NSMigratePersistentStoresAutomaticallyOption和NSInferMappingModelAutomaticallyOption键对应的值设置为YES:
NSError *error;
NSURL *storeURL = <#The URL of a persistent store#>;
NSPersistentStoreCoordinator *psc = <#The coordinator#>;
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
if (![psc addPersistentStoreWithType:<#Store type#>
configuration:<#Configuration or nil#> URL:storeURL
options:options error:&error]) {
// Handle the error.
}
Run Code Online (Sandbox Code Playgroud)
我NSPersistentStoreCoordinator以这种方式初始化:
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (persistentStoreCoordinator != nil) {
return persistentStoreCoordinator;
}
NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"FC.sqlite"]];
NSError *error = nil;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法NSPredicate来设置LIKE条件来获取对象.除此之外,一个OR也是有用的.我正在尝试做一些事情,如果用户搜索"詹姆斯"我可以写一个NSPredicate将做相当于:
select * from users where firstname LIKE '%James%' OR lastname LIKE '%James%';
Run Code Online (Sandbox Code Playgroud) 我创建了一个非核心数据项目.我现在想要使用核心数据.在构建阶段,我将我的二进制文件与CoreData.framework链接起来.在我的应用程序委托方法中,我想手动创建一个托管对象上下文
NSManagedObjectContext *aContext = [[NSManagedObjectContext alloc] init];
Run Code Online (Sandbox Code Playgroud)
当我执行上述操作时,出现以下错误:
Receiver 'NSManagedObjectContext' for class message is a forward declaration.
Run Code Online (Sandbox Code Playgroud)
关于我可能做错什么的任何建议?
Xcode 8更新:
在Xcode 8中,需要转到Core Data Model Editor和Show the File Inspector.靠近底部是代码生成的选项.选择Swift.
编辑:我找到了从Core Data实体生成Swift模型的解决方案:
在Xcode上:
编辑>创建NSManagedOjbect>单击按钮"下一步">单击"下一步"按钮>选择"Swift"Langage>单击"创建"按钮
我使用Core Data在Xcode 6 beta上创建了一个新的Swift项目,尝试了Swift语言.
当我从Core Data的实体生成模型时,Xcode创建了Objective-C模型.
有没有办法用Core Data生成Swift模型而不是Obejctive-C模型?
谢谢 !
我在一个多线程iOS应用程序中使用CoreData,一切似乎都运行正常 - 除非我在XCode中打开异常断点.每当我做一些CoreData工作时,断点都会在save:-method上停止NSManagedObjectContext- 但之后NSError为零.我在日志中也没有任何东西(除了:) Catchpoint 2 (exception thrown).,应用程序没有崩溃......所以很难说出现了什么问题.
我唯一的线索是,我有一个对象updatedObjects:在我的NSManagedObjectContext-但似乎有不妥的地方.
我的问题与stackoverflow上的这个问题 非常相似,但唯一的答案对我没有帮助; 我很确定我已经把所有东西都包括在内了.
这可能有什么问题?或者是否有其他可能获得一些错误信息?
非常感谢你!
编辑:显示代码非常困难.我正在使用objectID加载对象,在分配给当前线程的上下文中编辑和存储它们.我已经检查过了 - 当前线程的上下文总是正确的; 每个线程都有自己的上下文,这应该不是问题.如果只有某人可以告诉我如何从该错误/异常中获取更多信息 - 或者如果我不得不关心它,那将会很有帮助.在我看来好像异常是在'save'方法中捕获的,所以可能是一个"正常"的行为?
我对一个正在研究的项目(Mac OS X应用程序)有一些架构上的怀疑.它基本上由两个元素组成:一个在后台运行的守护进程收集一些数据,一个查看器用于表示收集的数据.
守护程序应在状态栏中显示(无停靠图标),并包含可通过状态栏访问的小菜单.它将数据保存在核心数据存储中.其中一个菜单项是打开查看器的链接.打开此查看器时,正常的 GUI应用程序应该开始包括停靠图标和菜单栏.打开应用程序本身时也会打开查看器(通过双击图标).
经过一些实验,我发现实现这个功能的最好方法是创建两个应用程序,代表查看器的主应用程序和代表守护进程的辅助工具.我这样做的原因之一是不能LSUIElement立即在值之间切换以强制守护进程/查看器状态.
现在我对这个架构有一些疑问:
守护程序和查看器应用程序都使用相同的核心数据存储来保存和检索数据.拥有多线程应用程序时,我知道NSManagedObjectContext需要多个对象才能正确同步数据.如何让多个应用程序同时使用相同的核心数据存储?这是否可能没有冲突,锁定等风险?我如何保证一致性?
守护程序应始终在查看器启动时启动.我通过简单地遍历所有打开的进程并检查是否列出了守护进程的bundle标识符来实现这一点.如果没有,守护进程使用NSWorkspace's' 开始launchApplication.这很好用.现在,当用户退出守护程序时,查看器也应该停止.查看器通知守护程序停止的最佳方法是什么?如果守护程序消失,我可以定期检查活动进程并退出查看器但听起来有点奇怪.我希望选择某种通知,当观众即将关闭时,我会发送这些通知.但由于应在应用程序之间发送和捕获此通知,因此我不知道哪种简单通知服务可用.有什么想法吗?
该应用程序是沙盒,因为它将在Mac App Store上分发.使用NSWorkspace's 启动应用程序launchApplication会导致目标应用程序在与我认为根本不是问题的源相同的沙盒环境中运行,因为在同一个沙箱中运行这两个应用程序感觉更好,可能是.但想象一下这个场景:守护进程在登录时自动启动(使用SMLoginItemSetEnabled),用户双击Viewer.app.由于守护程序已在运行(再次通过循环执行活动进程来检查),它将无法启动.现在我们有守护进程和查看器在不同的沙箱中运行吗?这会导致偏好,核心数据存储等问题吗?
我想NSUserDefaults用于基本配置,我可以以某种方式在守护进程和查看器之间交换这些数据吗?同样,两个应用程序将具有不同的包标识符.
在此先感谢您的帮助,谢谢!
在CoreData中,我定义了一个无序的 to-many关系.这种关系在Swift中定义如下:
@NSManaged var types : NSMutableSet
Run Code Online (Sandbox Code Playgroud)
但是,要最好使用Swift,我想使用普通的Swift数组Type[].但是,CoreData强迫我使用NS(Mutable)Set.我该如何输入/转换NSSet为Array<Type>[]?
我使用NSFetchedResultsController来显示一堆对象,这些对象使用日期进行分区.在全新安装中,它完全正常工作,对象显示在表格视图中.然而,似乎当应用程序重新启动时,我遇到了崩溃.我在初始化NSFetchedResultsController时指定了一个缓存,当我不这样做时,它完美地工作.
以下是我创建NSFetchedResultsController的方法:
- (NSFetchedResultsController *)results {
// If we are not nil, stop here
if (results != nil)
return results;
// Create the fetch request, entity and sort descriptors
NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:self.managedObjectContext];
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"utc_start" ascending:YES];
NSArray *descriptors = [[NSArray alloc] initWithObjects:descriptor, nil];
// Set properties on the fetch
[fetch setEntity:entity];
[fetch setSortDescriptors:descriptors];
// Create a fresh fetched results controller
NSFetchedResultsController *fetched = [[NSFetchedResultsController alloc] initWithFetchRequest:fetch managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"day" …Run Code Online (Sandbox Code Playgroud) 面对问题"值类型'AppDelegate'没有成员'managedObjectContext'在新的Xcode 8中(使用Swift 3,iOS 10)尝试在View Controller中创建新的上下文时
let context = (UIApplication.shared().delegate as! AppDelegate).managedObjectContext
Run Code Online (Sandbox Code Playgroud)
在Xcode 8中,AppDelegate.swift文件中没有managedObjectContext的代码.AppDelegate.swift中的核心数据堆栈代码仅显示:lazy var persistentContainer:NSPersistentContainer属性和func saveContext().没有managedObjectContext属性.
如何在Xcode 8)中使用Swift 3创建managedObjectContext,或者可能没有必要使用Swift 3来创建它?
我应该在创建NSManagedObject对象时何时检查"使用基本数据类型的标量属性" ?
它会花多少钱(我的数据库会提高性能还是更轻量级)?
core-data ×10
iphone ×3
objective-c ×3
swift ×3
ios ×2
xcode ×2
cocoa ×1
cocoa-touch ×1
daemon ×1
helpers ×1
ios8 ×1
macos ×1
model ×1
nspredicate ×1
swift3 ×1