Tag: nsmanagedobject

在Core Data中进行批量删除时试图实现主 – 子托pipe对象上下文

我正在一个项目中,我正在做一个从Core Data中检索的NSManagedObjects(MO)的批量删除。 当我迭代MO的这个集合时,我也通过在初始MO集合迭代期间调用一个获取方法来检索OTHER MO。 如果在这个迭代过程中,从获取请求中find一个对象,则MO被删除。 我意识到这是一个糟糕的架构devise,因为这些MO实际上应该具有相反的关系,因此通过级联删除规则,所有这些对象都很容易被删除。 不幸的是,情况并非如此,回去做这些修复是非常困难的,这就是我来到这里的原因。 另外,我意识到我描述的这个场景应该是使用父子NSManagedObjectContext来做正确的事情,当然,为了避免发生崩溃。 我不确定如何在我正在使用的体系结构中实现这一点。 这是我正在使用的代码的一个例子: – (void)massDelete { … NSArray *objectsToPurge = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error]; if (objectsToPurge) { [objectsToPurge enumerateObjectsUsingBlock:^(MyMO *mo, NSUInteger idx, BOOL *stop) { OtherMO *otherMO = [self fetchOtherMO:mo]; if (otherMO) { [self.managedObjectContext deleteObject:otherMO]; } [self.managedObjectContext deleteObject:mo]; }]; } [self.managedObjectContext save:&purgeError]; } – (OtherMO *)fetchOtherMO:(MyMO *)mo { NSManagedObjectContext […]

Swift dynamicCast错误,同时插入新的对象到数据库

我有一个字典,我有我想要插入到数据库中的所有数据作为新的对象。 问题是当我尝试抛出新创build的对象,它使我例外: libswift_stdlib_core.dylib`swift_dynamicCast: 汇编代码的一部分。 我使用的代码是这样的: var group:Group if (array.count == 0) { group = NSEntityDescription.insertNewObjectForEntityForName("Group", inManagedObjectContext:appDelegate.managedObjectContext) as Group } 而Group类的结构是这样的: @objc(Group) class Group:NSManagedObject{ @NSManaged var createDate:NSString @NSManaged var groupPictureUrl:NSString @NSManaged var groupTypeId:NSString @NSManaged var isDepartment:NSString @NSManaged var lastMessageRead:NSString @NSManaged var name:NSString @NSManaged var unreadMessageCount:NSString @NSManaged var groupId:NSString @NSManaged var lastSync:NSString } 我也有一个名为AppData的NSManagedObject的子类,它具有与Group类相同的结构。 而在插入我的代码的一部分,如果我用AppDatareplaceGroup它的作品,我可以插入到AppData表。 正如我之前所说,除了参数外,它们具有相同的结构。 但是当我尝试插入Group对象时,它给了我dynamic的强制转换exception。 […]

如何计算CoreData对象的唯一date?

我需要一个正确的方法来计算CoreData对象有一个NSDatetypes属性的独特天数。 例如,我有以下几点: <Object>.date = "2014-05-15 21:29:12 +0000"; <Object>.date = "2014-05-15 21:49:34 +0000"; <Object>.date = "2014-05-16 13:29:23 +0000"; <Object>.date = "2014-05-16 20:49:50 +0000"; <Object>.date = "2014-05-16 22:01:53 +0000"; <Object>.date = "2014-05-20 03:32:12 +0000"; <Object>.date = "2014-05-20 12:45:23 +0000"; <Object>.date = "2014-05-20 14:15:50 +0000"; <Object>.date = "2014-05-20 20:20:05 +0000"; 在这种情况下,结果必须是3,因为2014-05-15,2014-05-16和2014-05-20有3天 任何方式来处理这个问题? 我尝试了NSPredicate,但是没有成功 谢谢!

核心数据NSManagedObject – 跟踪属性是否改变

我有一个对象 – Config 。 我想知道Config上的Account属性是否已经改变。 发生这种情况时,我想发送一个NSNotification以便所有关心Account更改的代码都知道。 我最初的想法是在我的NSManagedObject子类,我会重写setAccount方法设置一个瞬态属性AccountDidChange为true 。 然后在didSave如果AccountDidChange为true我会发送通知,然后将其设置为false 。 有没有更好的办法? 我的问题是,从我读过的,通过改变AccountDidChange回到false ,我会弄脏我的对象,需要再次保存。 更多信息: Config对象是应用程序的当前configuration。 Account实际上可以更改为ActiveAccount 。 与Account实体有关系,其中包含所有帐户的列表。 这个想法是,用户可以更改应用程序的活动帐户。 所以我们有一套服务器,用户一次只能login一个。 Config.Account指向该活动帐户,并用于build立到服务器的连接以检索信息。 我正在使用这个通知Config.Account已经改变,告诉其他对象清理他们的信息 – 如警报列表。 基本上,所有的信息都是每个账户,所以它需要被删除,然后在新的活动账户的下一次加载中重新获取。 此外,给定的名称不是我的实际对象名称 – 只是试图让示例更容易遵循。

核心数据每次获取时都会为同一个NSManagedObject返回一个不同的对象实例。 为什么是这样?

我最近注意到,如果我获取一个ManagedObject,其中我可以validation模型中只有一个,并且在应用程序的任何位置都没有保留,每次获取返回对象时,它都是一个不同的实例(带有指向一个不同的内存地址)。 为什么是这样?

核心数据中的获取属性

在我的核心数据模型中,一个Person有一个或多个Cars ,由无序的一对多关系“汽车”指定。 通常情况下,我需要检索按datePurchased或dateLastUsed订购的人车。 到目前为止,我已经将自己的方法添加到了carsByDatePurchased Person中。 这使用sorting描述符来sortingNSSet cars并返回一个NSArray。 可以/我应该使用一个Fetched属性吗? 每次我按照特定的顺序需要汽车时,我都会遇到一些使用sorting描述符的性能开销,即使实现我自己的carsByDatePurchasedcaching。 它看起来像获取的属性为我caching – 是正确的? 获取的属性与我自己的实现有什么限制? 关键是,被掠夺的财产的价值在执行之间是否持续? 如果我更新提取的属性并保存我的上下文,是下次启动应用程序时存储的值?

NSObjectInaccessibleException',原因:'CoreData不能履行一个错误

我的iOS应用程序通过多个线程使用核心数据。 我得到一些崩溃报告,并带有以下消息:“'NSObjectInaccessibleException',原因:'CoreData无法履行'0x1e07a9b0'的错误 我明白是什么导致这个问题 – 对象被删除,但另一个线程试图访问它。 我正在努力解决这个问题,但我想在后台线程添加一个检查,看看对象是否会以这种方式错误。 我目前的代码与myObject.myValue 。 是否可以做一些检查,如: if (!myObject.myValue) { return; } …在做任何可能导致这样的崩溃的事情之前,它会摆脱这种方法? 或者只是简单地调用myObject.myValue ,甚至看它是否为空,导致这样的exception被抛出?

核心数据保存问题:无法更新可转换属性(NSArray)

我的核心数据应用程序中有一个奇怪的问题。 我的应用中有三个实体,但今天我发现其中一个问题。 我有问题的实体称为Invoice ,它有许多属性,包括Products 。 它编码NSDictionaries NSArray(通过默认NSValueTransformer)。 一切工作正常 – 我创build我的发票,客户,其产品等一切正常。 但是 ,当我从列表中select我的发票,然后尝试编辑其产品,然后单击“保存”button,我的保存工作,直到我的应用程序终止。 问题是只有我的products数组 – 其余(如付款date,客户端等)保存。 我在做什么 我通过我的Invoice对象 NSManagedObject *inv = [self.fetchedResultsController objectAtIndexPath:indexPath]; invoiceEditor.invoice = inv; 并保存我的数据(在我的InvoiceEditor VC): [self.invoice setValue:client forKey:@"Client"] // NSDictionary; [self.invoice setValue:products forKey:@"Products"] // NSArray of NSDictionaries; [self.invoice setValue:pmDate forKey:@"PaymentDate"] // NSDate; // other attributes NSManagedObjectContext *context = self.invoice.managedObjectContext; NSError *error = nil; […]

无法实例化NSManagedObject的子类

Xcode 6有很多bug。 但是我不太确定这是否是一个错误。 这可能不是,因为这是我刚刚正在学习的东西。 我的问题是,任何时候我尝试实例化我的NSManagedObject的子类,我没有select传递entity: NSEntityDescription和NSManagedContext: insertIntoManagedContext参数给构造函数,Xcode在调用“额外参数”实体“ 我从头开始创build一个新的Xcode项目,只是为了看看我是否可以在一个更小的,最小的项目中重新创build问题。 ToDoList.Item在Data Model Inspector中被设置为Item实体类。 代码如下: override func viewDidLoad() { super.viewDidLoad() let appDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate let context: NSManagedObjectContext = appDel.managedObjectContext! let ent = NSEntityDescription.entityForName("Item", inManagedObjectContext: context)! //compiler complains here var item = Item(entity: ent, insertIntoManagedObjectContext: context)! } 这是子类: import UIKit import CoreData class Item: NSManagedObject { […]

崩溃NSManagedObject版本:“objc_msgSend()select器名称:_queueForDealloc”

我有很多用户通过HockeyApp得到了一个奇怪的崩溃,下面的堆栈跟踪。 这似乎与NSManagedObject被释放在不同的调度队列中有关…但我没有得到任何象征性的问题可能。 这似乎是一个内存pipe理问题,但我使用ARC,所以不知道如何过度释放一个NSManagedObject。 这是我得到的崩溃报告(主线程在不同时间显示不同的痕迹): Code Type: ARM-64 Parent Process: launchd [1] Date/Time: 2014-05-12T05:43:54Z OS Version: iPhone OS 7.0.6 (11B651) Report Version: 104 Exception Type: SIGSEGV Exception Codes: SEGV_ACCERR at 0x1c3dbeb8 Crashed Thread: 2 Application Specific Information: objc_msgSend() selector name: _queueForDealloc: Thread 0: 0 CoreFoundation 0x000000018e384618 CFNumberGetType + 0 1 CoreFoundation 0x000000018e3333b8 _CFAppendXML0 + 2768 2 […]