Tag: 核心数据

使用MagicalRecord'CoreData无法解决错误'错误

我正在使用MagicalRecord 2.2。 有时我会在产品代码中收到“CoreData无法完成故障”的崩溃,并且已经创build了一些testing代码来调查此问题。 这是它的描述。 我有一个实体“对象”。 一开始,我在主线程上创build一个对象,然后调用[MagicalRecord saveWithBlock:…],从本地上下文中获取这个对象并删除它。 我添加了额外的日志logging方法(NSManagedObjectContext + MagicalSaves.m) (void)MR_saveWithOptions 🙁 MRSaveContextOptions)掩码完成 // BEFORE REAL SAVE is placed before line 'saved = [self save:&error];' // AFTER REAL SAVE is placed after it // Logging code line is: // // NSManagedObjectContext *context = … (defaultContext/rootContext/self) // NSArray *objects = [context executeFetchRequest:[NSFetchRequest fetchRequestWithEntityName:@"Object"] error:NULL]; // NSLog(@"%i […]

核心数据从本周获取数据

我有一个核心数据上下文中的对象有一个date存储在其中。 我只想按照这个顺序获取当周(星期一到星期天)的数据。 我不是在找最后的7天。 date可以是实体内存储的数据,也可以是对象添加到核心数据时的数据(它们是相同的)。 我可以使用这样的开始date和结束date的谓词: NSPredicate *weekPredicate = [NSPredicate predicateWithFormat:@"((date > %@) AND (date <= %@)) || (date = nil)",startDate,endDate]; 但我如何计算startDate和endDate?

如何使用核心数据外部存储释放内存?

如果文件很大,Core Data可以使用外部存储来存储二进制数据。 我正在使用该外部存储来存储图像,并在UITableView显示它们。 之前,我需要调整这些图像的大小,以适应用户界面的大小。 所以,我保存在内存NSData属性取自对象和图像大小。 有没有办法来处理这个内存问题? 或者这种做法是错误的? 谢谢。

iOS:在核心数据的背景下自动同步

我正在开发具有脱机function的自动同步应用程序。 用户将创build文件夹和文件,并可以与服务器同步。 有一个自动同步的function,在这个function中,服务器每隔一小时就会在后台进行同步。 在同步过程中,用户也可以创build,删除文件夹/文件。 所有更改都保存在核心数据中。 要更改发送到服务器,我维护一个布尔。 如果bool为NO,则将这些项目发送给服务器,一旦接收到响应,则将bool设置为YES。 现在我的问题是我如何确保在同步过程中所做的更改发送到服务器。 由于同步正在进行中,并在此期间,如果我做任何更改已发送到服务器的项目,即使同步布尔设置为无更改从服务器更新为是,这些更改将不会发送到服务器。 注意:我不想在同步过程中对用户进行任何限制。 我怎么能做到这一点?

iCloud核心数据模型模式迁移

根据苹果的文档 ,可以自动执行与iCloud连接的核心数据的轻量级迁移。 而另一份来自苹果的文件则表示: 如果将使用NSPersistentStoreUbiquitousContentNameKey选项configuration的持久存储迁移到新的模型版本,则商店的源自当前设备的更改历史logging也将被迁移,然后与使用新模型版本configuration的任何其他设备合并。 来自使用新版本的商店的任何更改也将合并到。 但是,如果使用自定义映射模型执行迁移,则不能将现有更改迁移到新模型版本。 我可以改变我的应用程序使用iCloud,我可以成功地将(手动)本地数据库迁移到无处不在。 所以,第一个与iCloud的核心数据并没有显示任何问题。 但是,当我添加新的模型版本时,迁移的商店不包含任何内容。 它应该包含使用旧版本模型创build的迁移内容。 the store's history of changes似乎由于某种原因而被忽略。 因此,安装新版本应用程序的testing人员会丢失使用早期版本创build的内容。 没有日志或错误。 当我尝试相同的初始化过程来存储没有NSPersistentStoreUbiquitousContentNameKey选项(本地存储),一切都很好。 所有内容都被正确迁移并被新商店包含。 第二个文件说: 但是,如果使用自定义映射模型执行迁移,则不能将现有更改迁移到新模型版本。 我认为我的需求可以匹配这种情况。 我也有自定义的映射模型。 但我不知道触发的地方。 我的商店select是非常典型的,不是那么特别: { NSInferMappingModelAutomaticallyOption = 1; NSMigratePersistentStoresAutomaticallyOption = 1; NSPersistentStoreUbiquitousContentNameKey = "moment-cloud"; NSPersistentStoreUbiquitousContentURLKey = Logs; } 商店url创build为: NSURL* docURL = [fileManager URLsForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask].firstObject; return [docURL URLByAppendingPathComponent: kFileNameDatabaseForUbiquitous];

编写“CONTAINED_BY”文本查询的NSPredicate

我试图构造一个核心数据存储的查询检索实体的属性值,当他们发生在更长的string; 即,而不是寻找属性值包含 (较短)string的实例: request.predicate = [NSPredicate predicateWithFormat:@"carBrand contains[c] 'merced'"] 我想find属性值(包含在一个任意(更长)的string中)的实例(的实体): NSString* textString = @"Elaine used to drive Audis, but now owns a Mercedes"; request.predicate = [NSPredicate predicateWithFormat:@"%@ contains[c] carBrand", textString ]; (即检索carBrand = @“Audi”和carBrand = @“Mercedes”的数组存储对象) 在我的尝试中,NSPredicate似乎不喜欢右侧属性名称的expression式,并引发错误… [__NSCFConstantString countByEnumeratingWithState:objects:count:]:无法识别的select器发送到实例0x 有没有一种方法来构build这样一个查询,在左侧的属性名称 – 一个“contained_by”查询,因为它是? PS 。 在search中,我只find解决scheme,将文本分解成组成单词 ,在我的情况下,将不太理想! 这是唯一可行的方法吗?

关于核心数据的两个问题

1.从两个视图使用相同的Core Data上下文的最好方法是什么? 我有一个TabBarController与两个ViewController。 在第一个我想logging一个时间,应该存储。 在第二个有一个TableView显示所有logging。 我按照教程中的说法做了,并启动了App Delegate中的所有ManagedDataContext,并将其传递给Controller: – (void)applicationDidFinishLaunching:(UIApplication *)application { SecondViewController *tableController = [[SecondViewController alloc] init]; tableController.managedObjectContext = [self managedObjectContext]; self.navigationController = [[UINavigationController alloc] initWithRootViewController:tableController]; [window addSubview: [self.navigationController view]]; [window makeKeyAndVisible]; } 但是,当我多次使用这个variables(也是在同一个类)时,我得到了(某种types的空指针)错误: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+entityForName: nil is not a legal NSManagedObjectContext parameter searching for entity name […]

保存更新的Core Data实例

在我的iOS应用程序,我有一个表视图显示来自核心数据实体的实例。 select一行后,应用程序会从实例属性值中打开一个视图详细信息,如果需要,用户可以更改它们。 从表视图控制器我使用didSelectRowAtIndexPath方法传递一个NSManagedObject : – (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { EditToDoViewController *detailViewController = [[EditToDoViewController alloc] initWithNibName:@"EditToDoViewController" bundle:nil]; NSManagedObject *selectedObject = [[self fetchedResultsController] objectAtIndexPath:indexPath]; detailViewController.selectedObject = selectedObject; //[self.navigationController pushViewController:detailViewController animated:YES]; [self presentViewController:detailViewController animated:YES completion:nil]; } 然后,在EditToDoViewController ,我使用文本字段显示实例值,如下所示: ToDoTextField.text = [[selectedObject valueForKey:@"thingName"]description]; 但我不知道现在如何实现一个保存方法来存储更新的ToDoTextField.text在AddToDoViewController实现文件中,我正在使用保存button操作方法内的下面的代码,但我想要插入一个新的对象,我想要更新它。 AppDelegate* appDelegate = [AppDelegate sharedAppDelegate]; NSManagedObjectContext* context = appDelegate.managedObjectContext; NSManagedObject *favoriteThing = [NSEntityDescription insertNewObjectForEntityForName:@"FavoriteThing" […]

核心数据自定义策略的select器语法是什么?

我正在尝试使用Core Data实现非常基本的自定义迁移。 一个属性最初被创build为Integer 16 ,值为0或1.在新的模型版本中,该属性被更改为Boolean ,下面的迁移策略应该处理它。 我已经看到了几个用Swift编写的例子,他们似乎没有使可访问性打开/公开,或者添加@objc使其可以被Objective-C访问。 我已经这样做了,以消除任何不工作的原因。 我已经使用以下expression式为实体映射创build了具有自定义策略的映射模型。 FUNCTION($entityPolicy, "convertInteger:" , $source.active) 它保持失败,因为select器不被识别。 具体来说,它会得到以下错误。 unrecognized selector sent to instance 我已经尝试了很多变化。 convertInteger: 转换(整数:) convertInteger(_ 🙂 我无法获得任何变化的工作。 什么是这个expression式的有效select器? 在Swift代码中,我把一个断言在初始化,它通过,但我不能在策略的expression式中使用相同的select器。 import CoreData @objc open class IntegerToBooleanMigrationPolicy: NSEntityMigrationPolicy { @objc public override init() { super.init() assert(responds(to: #selector(convert(integer:))), "Policy does not respond to selector!") } @objc open func convert(integer: […]

UIImageView + AFNetworking setImageWithURLRequest使用RestKit?

我为Rest Api实现使用了RestKit(0.20.0) – 所有GET,POST等。GETs返回图像的一些URL。 我正在使用UIImageView + AFNetworking setImageWithURLRequest函数来下载这些。 我惊讶地看到RestKit日志打印这些提取,所以我做了一些debugging。 似乎AFNetworking发送了一些通知,最终登陆RestKit。 看起来像它发生,因为AFNetworkingOperationDidStartNotification被激发的图像获取和RK已经在RKObjectRequestOperation.m中注册此通知。 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(HTTPOperationDidStart:) name:AFNetworkingOperationDidStartNotification object:nil]; 我的问题是 – 对于我来说,是否这是给我的路由这个问题,我的思想背后使用这个api是为了确保图像提取是完全独立的线程比RK。 这会影响我的CoreData实现吗? 这个图像是否会被caching – 我猜测它不会是因为我没有明确地存储它,但如果这些操作开始发生在与Rest api操作相同的池上,它可能会影响性能吗? 这是正确的实施? 我是否应该将图像caching在CoreData中,而不是全部使用AFNetworking API? 稍微偏离但相关的话题 – 我计划从服务器获取数百个项目,每个项目也可以有很多项目。 而且每一个都会有图像。 所以它是一个漂亮的networking应用程序。 是否有任何最佳实践来pipe理这些请求,以避免性能障碍? 提前Thx的帮助..