Tag: core data

CoreData和iCloud

我正在开发一个核心数据应用程序,并且正在考虑添加iCloud支持,但是在networking上浏览之后,我经常听说iCloud + CoreData是不可靠的,经常会中断。 这是真的? 我正在阅读的关于核心数据主题的一本书提到iCloud + CoreData在iOS 5中不可靠,但已经得到修复,但是我也听到相反的观点,iCloud + CoreData在iOS 6中依然不可靠。如果是这样自定义格式的数据库有帮助吗? 任何帮助将不胜感激。

NSPredicate和NSInvalidArgumentException中的SUBQUERY

我在Core Data中设置了以下模型。 Book has a to-many relationship, called toBookOrders, with OrderBook entity. The inverse is called toBook. Book has a BOOL value property called isSync. 我build立了以下NSPredicate 。 NSEntityDescription* entityDescription = [NSEntityDescription entityForName:@"Book" inManagedObjectContext:moc]; NSPredicate* predicate = [NSPredicate predicateWithFormat:@"isSync == 0 AND SUBQUERY(toBookOrders, $x, $x.toBook == SELF)"]; 通过这个谓词,我只需要抓取没有同步的书籍和他们的相关命令。 这是我收到的错误。 终止应用程序由于未捕获exception“NSInvalidArgumentException”,原因:“无法parsing格式string”isSync == 0和子查询(toBookOrders,$ x,$ x.toBook == SELF)“ […]

NSManagedObject的自定义初始值设定项

根据文件: 你不应该重写init。 你不鼓励重写initWithEntity:insertIntoManagedObjectContext: 而应该使用awakeFromInsert或awakeFromFetch。 如果我只想设置一些属性到当前的date或者类似的地方,这是好的,但是如果我想发送另一个对象并根据它的信息设置属性呢? 例如,在一个名为'Item'的NSManagedObject子类中,我想要一个initFromOtherThing:(Thing *)的东西,其中的项目名称被设置为东西的名称。 我想避免“只是要记住”每次创build项目后立即设置名称,并且当我决定我希望Item也设置另一个基于Thing的默认属性时,必须更新15个不同的控制器类。 这些是与模型相关的行为。 我该怎么处理这个?

使用另一个expression式作为sum:expression的参数从NSManagedObject获取聚合数据

是否可以使用expression式作为sum: expression的参数? 我有实体( NSManagedObject类) Drink属性costPerDrink , numberOfDrinks和drinkingDate 。 我想在一段时间内得到总成本( numberOfDrinks乘以costPerDrink )的总和。 虽然我没有任何问题得到单一财产总和(例如在时间段内数字的总和),当我尝试使用另一个(乘法)expression式的和expression式时,我得到错误: NSInvalidArgumentException, reason: Unsupported argument to sum : ( "costPerDrink * numberOfDrinks" ) 见代码: // Init fech NSFetchRequest *request = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"Drink" inManagedObjectContext:[Service appContext]]; [request setEntity:entity]; // Return dictionary [request setResultType:NSDictionaryResultType]; // Set conditions [request setPredicate:[NSPredicate predicateWithFormat:@"(drinkingDate>=%@) AND […]

Keypath <transientproperty>在实体中找不到

我想在表格视图的部分标题中显示格式化的date.. 我使用下面的代码。但它抛出一个exception*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath dateSectionIdentifier not found in entity <NSSQLEntity Expense id=1>' 。 猜测添加sorting描述符时会发生exception。 NSMutableArray *sortDescriptors = [[NSMutableArray alloc] initWithCapacity:20]; NSSortDescriptor *mainSortDescriptor = [[NSSortDescriptor alloc] initWithKey:dateSectionIdentifier ascending:NO]; [sortDescriptors addObject:mainSortDescriptor]; [fetchRequest setSortDescriptors:sortDescriptors]; //Expense.h NSString *dateSectionIdentifier; //Expense.m @dynamic dateSectionIdentifier -(NSString *)dateSectionIdentifier{ [self willAccessValueForKey:@"dateSectionIdentifier"]; NSString *tempDate = [self primitiveDateSectionIdentifier]; [self didAccessValueForKey:@"dateSectionIdentifier"]; […]

决定使用核心数据还是NSUserDefaults

我在我的应用程序上有一个function,允许用户邀请他们的朋友(通过Facebook或朋友在他们的地址簿中)。 大多数人会拥有<5K的朋友,有些人拥有更多(也许最多有10K个朋友)。 我想跟踪他们邀请的朋友,所以他们不会再邀请他们。 为了做到这一点,我保存在NSUserDefaults的朋友的字典存储这些信息。 我想知道如果NSUserDefaults就足够了,或者如果我需要使用Core Data 。 此外,我正计划添加一项function,以便邀请朋友参加特定活动。 (在我们的应用程序中有很多事件)。如果我想跟踪哪些朋友被邀请参加哪个事件,那么我应该使用Core Data吗? NSUserDefaults满足吗? (我假设它不会)。 最后,应该使用Core Data还是应该保存在服务器端?

为什么NSManagedObject实例不能强制引用NSManagedObjectContext?

正如在另一个关于SO(和苹果文档 )的问题中指出的那样, NSManagedObject实例并没有强有力的引用它们所源自的NSManagedObjectContext 。 乍一看,这似乎是一个奇怪的决定,因为NSManagedObject实例在没有context几乎是无用的,因为它会导致错误,例如错误,当它们应该时不会触发 。 任何人都可以提供一些背景为什么是这样的情况? 实现NSManagedObject子类会自动拥有对其NSManagedObjectContext的强引用吗? 编辑:感谢伟大的答案这个问题,我发现我的托pipe对象是由RestKit有意临时NSManagedObjectContext创build的。 接下来是我的下一个问题,具体到RestKit, 在这里 。

NSFetchedResultsController:多个FRC,更新时委派错误

目标:使用FRC,通过startDate (一个NSDate属性)对Section's进行sorting,但是希望Today的Section出现在Upcoming dates Section之前。 我使用瞬态属性sectionIdentifier跟踪了Apple的代码。 苹果的示例代码 。 并首先从这个项目开始: OneFRC 我很快意识到,这可能不可能与一个FRC(我可能是错的)。 接下来,我决定用3 FRCs 刺杀这个 : ThreeFRC 。 TableView sections现在显示在我想要的订单中: 第0部分: Today 第一部分: Upcoming 第二部分: Past 但是,添加数据会触发FRC委托,并且出现以下错误: CoreData: error: Serious application error. An exception was caught from the delegate of NSFetchedResultsController during a call to -controllerDidChangeContent:. Invalid update: invalid number of rows in section 0. The number […]

不能使用比较魔法logging中的date的谓词

我正在做一个方法,将删除所有我没有更新在上次同步的NSManagedObjects。 – (void)removeStaleObjects { // Delete objects that have not been updated in this sync. NSPredicate *stalePredicate = [NSPredicate predicateWithFormat:@"updated < %@", self.syncStart]; NSArray *staleObjects = [Node MR_findAllWithPredicate:stalePredicate]; for (Node *n in staleObjects) { [[NSManagedObjectContext MR_defaultContext] deleteObject:n]; } } 该代码在MR_findAll …行上保持失败 [__NSDate objCType]: unrecognized selector sent to instance 我已经用苹果文档检查了我的语法,并且我正确地创build谓词是99%,startDate只是 _startDate = [NSDate date]; 在我的同步之前运行。 然后我同步后,我打电话 […]

核心数据不会对已更改的谓词做出反应

这是一个奇怪的问题。 在我的视图控制器SpieleOrtTVC我将展示Spiel实体的一个子集。 每次调用视图控制器时,都应该根据用户在视图控制器中的select来显示不同的子集。 这对于每次第一次调用视图控制器都很有效。 取决于用户的select,抓取文件被移交给新的视图控制器,并正确地到达那里,正如NSLogcertificate的那样。 显示的结果和数据也是如此。 但是当视图控制器被第二次或第三次调用时,那么正确的获取条件也会被传递给视图控制器,但是这个获取结果对应于之前执行的获取。 这是代码。 SpieleOrtTVC被称为地图标注。 所选对象的名称恰好在注释标题中,被移交给新近实现的SpieleOrtTVC。 调用视图控制器与地图: – (void)mapView:(MKMapView *)mv annotationView:(MKAnnotationView *)pin calloutAccessoryControlTapped:(UIControl *)control { SpieleOrtTVC *detailViewController = [self.storyboard instantiateViewControllerWithIdentifier:STORYBOARD_ID_SPIELE_ORT]; MKPointAnnotation *theAnnotation = (MKPointAnnotation *) pin.annotation; NSLog(@"the Annotation %@",theAnnotation.title); detailViewController.ortName = theAnnotation.title; detailViewController.stadionName = theAnnotation.subtitle; [self presentViewController:detailViewController animated:YES completion:nil]; } SpieleOrteTVC.h: @property (strong, nonatomic) NSString *ortName; @property (strong, nonatomic) NSString *stadionName; […]