Tag: core data

使用核心数据,iCloud和现场同步问题

我正在使用核心数据和iCloud同步在我的应用程序的目的。我与两个设备同步时遇​​到问题。 示例:我在我的数据库中使用customerID作为主键。当我在一台设备上input的数据是ID为1,同时如果我在另一台设备上input了不同的数据,那么这个数据也不会。 1,所以当它同步和刷新数据库我的应用程序正在崩溃,由于相同的customerID应该是唯一的。 注意:客户ID自动获得下一个可用号码。 请帮助我find一个很好的解决scheme。 谢谢

RKObjectMapping和RKEntityMapping之间的关系

说我有这样的JSON : { "hits": 4056, "books": [ { "name": "Book 1" }, { "name": "Book 2" }, { "name": "Book 3" } ] } 我想将这个响应映射到BooksResponse对象: @interface BooksResponse @property (nonatomic, assign) NSInteger hits; @property (nonatomic, strong) NSArray* books; @end 其中books属性是CoreData Book对象的数组。 我正在使用RKObjectEntity来映射BooksResponse如下所示: RKObjectMapping* booksResponseMapping = [RKObjectMapping mappingForClass:[BooksResponse class]]; [booksResponseMapping addAttributeMappingsFromDictionary:@{ @"hits" : @"hits" }]; [booksResponseMapping addPropertyMapping:[RKRelationshipMapping […]

NSFetchedResults控制器在不同的视图控制器互相更新?

好吧,我越来越一般这个问题,因为我已经注意到我的应用程序由于这个几个滞后。 我已经注意到重新sorting的问题,但也发生在其他地方。 我有一个CoreDataViewController类,所有我的表视图控制器的子类。 在这个类中,我基本上拥有所有的NSFetchedResultsController委托方法,就像它们在苹果文档中一样。 然后我试着找出这个NSFetchedResultsController发现变化的频率,以找出我的时间滞后的地方: – (void)controllerDidChangeContent:(NSFetchedResultsController *)controller { if(self.suspendAutomaticTrackingOfChangesInManagedObjectContext) return; NSLog(@"ControllerDidChangeContent"); TICK; [self.tableView endUpdates]; TOCK; } 所以例如在我的视图控制器A中,我有这个获取请求(从viewDidLoad调用): – (void)setupFetchedResultsController { //NSError *error = nil; NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"SpendingCategory"]; request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"position" ascending:YES]]; //[self.mainCategory.managedObjectContext executeFetchRequest:request error:&error]; request.predicate = [NSPredicate predicateWithFormat:@"belongsToMainCategory = %@", self.mainCategory]; self.fetchedResultsController = [[NSFetchedResultsController alloc]initWithFetchRequest:request managedObjectContext:self.mainCategory.managedObjectContext sectionNameKeyPath:nil cacheName:nil]; } 如果我在此视图控制器中更改我的对象的属性,则我的日志只会打印出“ControllerDidChangeContent”注释。 […]

在IOS中使用iCloud导出和导入文档

我正在开发一个应用程序,使用户使用iCloud Drive / iCloud Documents / iCloud Kit将核心数据logging导出到文档中,并且他可以在其他设备上导入和访问这些文档。 我指的是在使用相同应用程序的设备中导出/导入文档。 文件可以通过唯一的文件名称来标识以便导入.. 请给上述任务build议。 哪一个更有用..或build议任何其他有用的链接上面的任务。 1) iCloud文档。 (文件存储) 2) iCloud工具包。 (庞大/复杂的数据量) 3) 键值存储。 (less量的数据) 我已经使用iCloud Documents成功实现了导出/导入。 但是我能够访问只在同一个设备中导出的文档。 因为它存储本地存储.. 我用iCloudSync来检索文件。 https://github.com/iRareMedia/iCloudDocumentSync 现在,我指的是在相同的应用程序和多个设备访问iCloud工具包.. 谢谢..!

从TableView和coreData中删除行

我有一个问题,从tableView中删除行填充coreData对象。 试图做到这一点: -(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath*)indexPath{ if (editingStyle == UITableViewCellEditingStyleDelete) { [self.tableView beginUpdates]; NSManagedObject *managedObject = [self.fetchedResultsController objectAtIndexPath:indexPath]; NSLog(@"Deleting (%@)", [managedObject valueForKey:@"original_title"]); [self.managedObjectContext deleteObject:managedObject]; [self.managedObjectContext save:nil]; [self performFetch]; [self.tableView endUpdates]; } } 所以,当我点击“删除”button,应用程序崩溃与以下日志: *** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-2872.3/UITableView.m:1254 2013-08-13 18:39:17.624 RR_proto[1076:a0b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid […]

将iCloud数据迁移到本地存储,并停止响应iCloud

我非常接近在我的应用程序中完成iCloud和Core Data的实现。 这是一个仅适用于iOS 7的应用程序。 我在应用程序中向用户提供一个选项,以UISwitch的forms说“使用iCloud On或Off”。 该应用程序启动,并询问用户是否要使用iCloud,这可以稍后在应用程序中更改。 我有从本地存储(如果存在)迁移到iCloud的数据。 我正在努力的一个方面是将数据从iCloud商店迁移到本地商店。 场景: – 用户A有一个iPhone与我的应用程序和一些数据 – 用户A下载应用程序到iPad,select使用iCloud,但稍后,决定他们不想在iPad上同步。 所以他们closures了应用程序内的iPad iCloud同步。 在这一点上, 我的理解是,用户会希望数据仍然存在,但是从幕后来看,现在是“LOCAL”而不是“iCloud”数据,这意味着来自另一个设备的条目将不会同步到这个设备,反之亦然 所以我正试图做到这一点。 问题 我可以将数据从iCloud迁移到本地存储,但问题是,因为iCloud仍然在设备上启用,下次运行应用程序时,我可以看到iCloud在应用程序内被禁用,但控制台仍然显示使用本地存储1,然后0和iPhone中的任何数据同步到iPad,即使使用iCloud UISwitch非常清楚。 以下是进行迁移的主要代码: – (void)migrateiCloudStoreToLocalStore { NSLog(@"Migrate iCloudToLocalStore"); NSPersistentStore *store = self.persistentStoreCoordinator.persistentStores.lastObject; //NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Envylope.sqlite"]; NSURL *storeURL = [self.persistentStoreCoordinator.persistentStores.lastObject URL]; NSLog(@"Current Store URL (before iCloud to Local migration): %@", [storeURL description]); NSDictionary […]

家长MOC获取来自儿童MOC的空数据的变化

我遇到了CoreData和Parent-Child MOC的这个问题:在向MOC添加对象时,保存它们并保存父MOC所有对象都将其属性重置为defaultValue。 我在这里粘贴了两个MOC中的日志,特别是这些日志中的“stringAttribute”和“date”属性被重置。 我到处寻找这个问题,但是我没有find任何东西,我也看了很多亲子MOC的实现,但我无法弄清楚我做错了什么。 提前致谢! 以下是代码片段: 我添加一些NSManagedObject到主上下文,然后用saveContext:方法保存 // Another singleton method – (void)anotherMethod { […] [self.managedObjectContext insertObject:managedObject]; NSError *error; save = [self saveContext:&error]; […] } // Database manager singleton method – (BOOL)saveContext:(DKError *__autoreleasing *)error { __block BOOL save = NO; __block NSError *internalError; [self.managedObjectContext performBlockAndWait:^{ internalError = nil; [self.managedObjectContext log]; // See log 1.1 below […]

核心数据validation:从Objective-C到Swift

我正在构build一个虚拟iOS项目,以了解如何在Swift中实现核心数据validation。 项目的核心数据模型有一个名为Person实体,它包含两个属性: firstName和lastName 。 该项目是基于Swift,但为了启动它,我使用Objective-C来定义NSManagedObject子类: Person.h @interface Person : NSManagedObject @property (nonatomic, retain) NSString *firstName; @property (nonatomic, retain) NSString *lastName; @end Person.m @implementation Person @dynamic firstName; @dynamic lastName; -(BOOL)validateFirstName:(id *)ioValue error:(NSError **)outError { if (*ioValue == nil || [*ioValue isEqualToString: @""]) { if (outError != NULL) { NSString *errorStr = NSLocalizedStringFromTable(@"First name can't be empty", […]

集合函数上的iOS FetchRequest:如何包含挂起的更改?

我终于至less缩小了这个问题。 我正在计算一些支出的总和函数(在这个例子中是总和)。 如果我改变了一些支出,这个聚集提取不会立即刷新,而只是在一段时间之后(可能在更改被保存到数据库之后)。 我在文档中find了这个部分: – (void)setIncludesPendingChanges:(BOOL)yesNo 根据文件 结果typesNSDictionaryResultType不支持YES值,包括计算聚合结果(如max和min)。 对于字典,从读取中返回的数组反映了持久性存储中的当前状态,并且不考虑上下文中的任何挂起的更改,插入或删除。 如果您需要为最大和最小等简单聚合考虑待处理的更改,则可以改为使用正常的获取请求,按照所需的属性进行sorting,获取限制为1。 好的,我怎么能仍然包括未决的变化? 我正在使用NSFetchedResultsController来显示我的数据。 这里是我的聚合函数: – (NSNumber *)getExpendituresAmountForCostPeriod:(CostPeriod)costPeriod { NSLog(@"getExpenditures_Start"); NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Expenditures"]; [fetchRequest setResultType:NSDictionaryResultType]; NSDate *startDate = [NSDate startDateForCostPeriod:[self getBiggestCostPeriod]]; fetchRequest.predicate = [NSPredicate predicateWithFormat:@"forSpendingCategory = %@ AND date >= %@", self, startDate]; //Define what we want NSExpression *keyPathExpression = [NSExpression expressionForKeyPath: @"amount"]; NSExpression *sumExpression […]

NSUserDefaults或其他东西存储大型数组?

我有一个将JSON读入内存对象的应用程序。 我有一个对象代表用户,然后是一个自定义对象的数组。 这个数组通常是20-50个对象,但在罕见的情况下可以达到7-800个。 我已经阅读了一些关于这个线程,但发现很难挑选,因为我想要做的就是caching这个本地,没有更多,所以我可以从服务器获取较less。 我可以看到三个解决scheme: NSUserDefaults 。 不确定应用性能如何受到大型arrays的影响 CoreData / MagicalRecord 。 看起来不错,但有点复杂 与NSCoding /解码的Plist 定制解决scheme 我倾向于NSUserDefaults或Plist,因为它似乎是最简单的,我只想在应用程序启动/存在时读取和从内存中读取。 但是,是否有任何我应该知道的问题,比如在存储如此多的对象时的性能或应用程序启动时间 ? 有使用MagicalRecord的其他原因吗? 指针非常感谢。 编辑:添加了plist / NSCoding的select,忘记了。