Tag: 核心数据

核心数据。 NSPredicate问题使用常量文字作为属性的名称

我有NSManagedObject属性。 假设它是一个属性: @property (retain, nonatomic) NSString *city; 对于从核心数据获取数据,我总是使用NSPredicate 。 谓词如下所示: NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K == %@", @"city", @"San Francisco"]; 但这里的问题是项目使用键“城市”作为未定义的关键在像一个常数的意义。 因此,假设我在我的应用程序中使用了“城市”键1000次,那么如果NSManagedObject的属性发生更改,例如cityName,则需要用新的键replace所有这些键。 在这种情况下,我需要使用谓词: NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K == %@", @"cityName", @"San Francisco"]; 这不舒服。 所以现在我使用全局extern NSString key kCity = @"city"; 但如果数据模型也发生了变化,则会出现问题,因为如果属性将被更改,那么只有在运行应用程序和控制台会对我说: 'key path city not found in entity <NSSQLEntity… 哪种解决方法可以在这里? 我以为使用类似的东西 NSString * const kCity […]

ios Coredata大集插入

嘿,我坚持了相同的问题几天,插入时间逐渐增加,并在较低的iPad它也崩溃与内存问题。插入20Klogging需要4-5分钟。将提高后台线程提高效率。 ? 无论如何,我可以优化这一点。 请帮忙,如果可以的话。 +(BOOL) addObjectToProfessionalsDBWithDict:(NSArray*)profArray{ if (!([profArray count]>0 && profArray )) { return NO; } NSManagedObjectContext *thisContext=[self getManagedObjectContext]; for (int i=0; i<[profArray count]; i++) { NSManagedObject *professionalDBObject = [NSEntityDescription insertNewObjectForEntityForName:@"ProfessionalsDB" inManagedObjectContext:thisContext];//initWithDictionary:objectDict]; NSMutableDictionary * objectDict=[profArray objectAtIndex:i]; [professionalDBObject setValue:[objectDict valueForKey:@"Degree"] forKey:@"degree"]; [professionalDBObject setValue:[objectDict valueForKey:@"First_Name"] // and 10 more values if(i%500==0){ NSError *error; NSLog(@"saved rec nu %d",i); […]

RestKit:如何手动设置托pipe对象属性的值?

如何在对象pipe理器pipe理的情况下手动设置RestKit中托pipe对象属性的值? 我创build了一个具有核心数据持久性持久性存储的RKObjectManager。 我添加了一个RKEntityMapping和一个RKResponseDescriptor对象pipe理器。 现在我可以这样调用对象pipe理器: [[RKObjectManager sharedManager] getObjectsAtPath:@"/path_to_ressource" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { // success } failure:^(RKObjectRequestOperation *operation, NSError *error) { // report error }]; 数据显示在一个UITableView(我正在使用NSFetchedResultsController)。 一切看起来不错,我的数据是持久的。 现在我想添加一个属性到依赖于响应描述符的keypath的实体。 我应该怎么做,在哪里? 我第一次尝试: 我将属性添加到核心数据实体,然后我在上面提供的代码的成功块中尝试了这一点: for (Entity *s in mappingResult.dictionary[@"CurrentEntities"]) { s.isCurrent = [NSNumber numberWithBool:YES]; } for (Entity *s in mappingResult.dictionary[@"OldEntities"]) { s.isCurrent = [NSNumber numberWithBool:NO]; } 假设json看起来像这样: { […]

在数据库中build模重复事件,并使用UILocalNotification来触发事件

我不知道这是如何工作的,但我想要的是类似苹果公司的iPhone闹钟。 它基本上只是让你select一个闹钟的时间,给闹钟命名,然后你可以select你想要重复的周期(周日到周六)。 根据您的select,报警会触发一次或重复一次。 在我的核心数据模型中,我不确定如何build模。 如果我只是用简单的旧对象来思考,我会想我会有一些报警对象,其中一个属性是一个数组。 在那个arrays中,我可以获得星期天 – 星期三的date值。 然后,当一个新的报警对象被创build,我会安排一个UILocalNotification所select的时间,以及select的日子。 以数据库对象来build模,我不知道我该怎么做。 我在想像这样的东西: 闹钟 – (名称/string)日 – (星期天 – 星期六/用整数0-6,1表示到闹钟到日子的多种关系) 假设在数据库中没问题,那么我不知道应该如何安排UILocalNotifications,因为我认为每个应用只能有64个。 我想我可以有一些机制来安排前64个可能的警报,然后当应用程序打开时,它只是重新安排下一个即将到来的64个事件。 那是我该怎么做的? 谢谢。

核心数据Swift在优化的版本中抛出generics函数失败

我们有一个相当广泛的核心数据模型的应用程序,在Objective C中实现了大量的自定义子类,但是这些子类也是使用Swift编写的应用程序的一部分。 (值得一提的是:我们正在使用Xcode 7.3.1和iOS 9.3进行构build,因此Swift代码是2.2)。 有一个用Swift编写的帮助函数,看起来像这样: extension NSManagedObject { func inContext<T: NSManagedObject>(moc: NSManagedObjectContext) -> T? { guard self.managedObjectContext != moc else { return (self as! T) } do { let obj = try moc.existingObjectWithID(self.objectID) return (obj as! T) // <— fails here } catch let error { return nil } } } 这在对象跳转上下文的相当多的地方被调用。 调用代码通常如下所示: let […]

生成失败,错误命令/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc

我正在使用Xcode 8.2.1。 我也在我的项目中使用CoreData。 当我尝试生成一个版本或当我存档时,我看到以下错误。 错误中提到的文件有时也会更改。 错误: <unknown>:0: error: no such file or directory: '/Users/anuragparashar/Library/Developer/Xcode/DerivedData/app-drgjxhipxxqdrcatqfdgpayyxnud/Build/Intermediates/app.build/Debug-iphoneos/app.build/DerivedSources/CoreDataGenerated/app/BuildingRoofMapping+CoreDataClass.swift' <unknown>:0: error: no such file or directory: '/Users/anuragparashar/Library/Developer/Xcode/DerivedData/app-drgjxhipxxqdrcatqfdgpayyxnud/Build/Intermediates/app.build/Debug-iphoneos/app.build/DerivedSources/CoreDataGenerated/app/BuildingRoofMapping+CoreDataProperties.swift' <unknown>:0: error: no such file or directory: '/Users/anuragparashar/Library/Developer/Xcode/DerivedData/app-drgjxhipxxqdrcatqfdgpayyxnud/Build/Intermediates/app.build/Debug-iphoneos/app.build/DerivedSources/CoreDataGenerated/app/Region+CoreDataClass.swift' <unknown>:0: error: no such file or directory: '/Users/anuragparashar/Library/Developer/Xcode/DerivedData/app-drgjxhipxxqdrcatqfdgpayyxnud/Build/Intermediates/app.build/Debug-iphoneos/app.build/DerivedSources/CoreDataGenerated/app/Region+CoreDataProperties.swift' <unknown>:0: error: no such file or directory: '/Users/anuragparashar/Library/Developer/Xcode/DerivedData/app-drgjxhipxxqdrcatqfdgpayyxnud/Build/Intermediates/app.build/Debug-iphoneos/app.build/DerivedSources/CoreDataGenerated/app/StateRegionMapping+CoreDataProperties.swift' <unknown>:0: error: no such file or directory: '/Users/anuragparashar/Library/Developer/Xcode/DerivedData/app-drgjxhipxxqdrcatqfdgpayyxnud/Build/Intermediates/app.build/Debug-iphoneos/app.build/DerivedSources/CoreDataGenerated/app/WalkingDoors+CoreDataClass.swift' <unknown>:0: […]

在代码中使用genericsInt – 在Core Data iOS中使用32或64位Int?

我正在用swift编写一个应用程序,通过苹果的核心数据保存它的数据。 在我的代码中,所有的整数都只是声明为“Int”,因为这更灵活,编译器将这些整数调整到运行代码的设备上。 但是,当我想使用核心数据保存这些“Int”时,我必须select32位或64位整数。 如果可能的话,我会希望我的应用程序与iphone 5-6s兼容,因此我不太愿意为32位(我读了苹果由于更好的性能而在6s中移动到32位)。 任何解决方法来保持这部分代码的灵活性? 如果我select32位,如果代码在64位设备上运行将会发生什么? 提前致谢。

从实体A的给定实例获得实体B的所有实例的总和

我有实体A和实体B(iOS核心数据应用程序)之间的一对多关系。 我需要从实体A的给定实例获得实体B的所有实例的NSDecimalNumber属性的总和。有没有人有这样的教程或例子?

重新排列UITableView中的单元格Bug和保存更改

重新排列单元格在我的自定义 UITableView我遇到一个错误,例如 如果我正在重新排列1,2,3,4,5,并且将单元格​​1移动到单元格5的末尾,那么会发生什么情况,所有单元格都会将其自己重命名为要replace的单元格。 因此,代替2,3,4,5,1的新订单,它变成1(2),2(3),3(4),4(5),1(移动单元格)。 在我的核心数据模型中,我有两个用于Folder的实体,另一个用于Items 。 这是一个NSSettypes的很多关系,所以Folder可以有很多项目。 项目有一个叫做Inttypesindex的属性, 表示数组中的项目顺序,而Folder具有一个名为arrayOfItems transienttypes的可转换types的transient属性。 这将返回按其索引值sorting的项目的数组。 控制台打印end of didmovecell function 但不 Moved cell 。 table.didMoveCellFromIndexPathToIndexPathBlock = {(fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) -> Void in func tableView(tableView: UITableView, moveRowAtIndexPath sourceIndexPath: NSIndexPath, toIndexPath destinationIndexPath: NSIndexPath) { let itemThatMoved = self.selectedFolder.arrayOfItems[sourceIndexPath.row] self.selectedFolder.arrayOfItems.removeAtIndex(sourceIndexPath.row) self.selectedFolder.arrayOfItems.insert(itemThatMoved, atIndex:destinationIndexPath.row ) var currentIndex = 0 for item in self.selectedFolder.arrayOfItems { […]

核心数据模型devise – 更改“活动”对象也会更改保存的对象

我正在开发我的第一个Core Data项目(在iPhone上),我非常喜欢它。 核心数据是很酷的东西。 然而,我却遇到了一个devise难题,我不知道如何解决,尽pipe我想这是一个相当普遍的情况。 它涉及数据模型。 为了清楚起见,我将以一个虚构的足球游戏应用为例来说明我的问题。 说有NSMO的叫唐斯和戏剧。 戏剧function像唐斯使用的模板。 用户创build播放(例如,Bootleg,button挂钩,倾斜路线,扫描等)并填写各种属性。 戏剧与唐斯有多对多的关系。 对于每个Down,用户决定使用哪个Play。 当执行下来时,它使用播放作为它的模板。 每次运行结束后,它都存储在历史logging中。 该scheme记得所有的唐斯玩过。 到现在为止还挺好。 这一切工作正常。 我所关心的问题是当用户想要改变Play的细节时会发生什么。 我们假设它最初涉及左边的传球,但是用户现在想要传球到右边。 但是,进行这种改变不仅会影响Play的所有未来执行, 还会改变历史中存储的Plays的细节 。 Downs的logging实际上被“污染”,因为Play模板已被更改。 我一直在围绕着这种情况进行几个可能的解决scheme,但是我认为SO的天才比我更了解如何处理这个问题。 不过,我提出的潜在问题是: 剧本的“版本化”。 对Play模板的每个更改实际上都会创build一个具有相同名称的新的单独的Play对象(就用户而言)。 然而,在引擎盖下面,这实际上是一个不同的游戏。 这可能会起作用,AFAICT,但似乎可能会导致Play对象的一个​​狂放的扩散,特别是。 如果用户不断地在同一个Play的几个版本之间来回切换(每次用户切换时在对象之后创build对象)。 是的,应用程序可以检查预先存在的,相同的Plays,但是…看起来像一团糟。 让Downs在保存后logging他们使用的Play的细节,但不能将其作为Play对象。 这看起来很荒谬,因为Play对象只是在那里保存那些细节。 认识到Play对象实际上实现了两个function:一个是Down的模板,另一个是logging使用的模板。 这两个函数与Down有不同的关系。 第一个(模板)有一个多对多的关系。 但是第二个(唱片)有一个一对一的关系。 这意味着要创build第二个对象,就像“Play-Template”,它可以保留与Downs的多对多关系。 玩对象将被重新configuration为与唐斯有一个一对一的关系。 Down将使用Play-Template对象来执行,但使用新的Play对象来存储使用的模板。 这是从一对多关系到代表问题关键的一对一关系的转变。 即使写出这个问题也帮助我更清楚。 我认为像解决scheme3是答案。 但是,如果有人有更好的主意,甚至只是确认我走在正确的轨道上,那将是有益的。 (请记住,我并不是真的在制作一个足球比赛,而是使用每个人都能理解的比喻更快更简单。)