Tag: nsmanagedobject

创build一个NSManagedObject的子类

我有一个子类NSManagedObject类: @interface MapStateDB : NSManagedObject @end 现在我想创build一个MapStateDB类的子类: 。H @interface MapState : MapStateDB @property (weak, nonatomic) id <MapStateDelegate> delegate; @end .M @implementation MapState @synthesize delegate = _delegate; @end 除了当我尝试创build一个MapState对象时,它失败: MapState *mapState = [MapState MR_createEntityInContext:context]; DLog(@"mapState: %@", mapState); 输出: DEBUG | -[LoginViewController testStuff] | mapState: (null) 我可以创build一个MapStateDB对象: MapStateDB *mapStateDB = [MapStateDB MR_createEntityInContext:context]; DLog(@"mapStateDB: %@", mapStateDB); 输出: DEBUG […]

在NSUserDefaults中保存NSManagedObject

大家好(抱歉我的英文不好,我是法文), 我试图把我NSManagedObject到NSUserDefaults检索它的关系。 基本上我用NSCoding和我已经实现了所需的方法,但是因为它是NSManaged对象,init方法的签名是:init(实体:NSEntityDescription,insertIntoManagedObjectContext上下文:NSManagedObjectContext?)。 消息是“NSInvalidArgumentException”,原因是:“非法尝试在不同上下文中的对象之间build立关系”shop“ 如果我在Address: self.shop = shop注释这行,它会一次又一次地创build我的实体。 这是我的代码: 把商店放在NSUserDefaults : let selectedShop = shopFetchedResultsController!.fetchedObjects![indexPath.row] as! Shop let encodedShop = NSKeyedArchiver.archivedDataWithRootObject(selectedShop) NSUserDefaults.standardUserDefaults().setObject(encodedShop, forKey: "currentShop") 并检索它: let encodedShop = NSUserDefaults.standardUserDefaults().objectForKey("currentShop") as! NSData let currentShop = NSKeyedUnarchiver.unarchiveObjectWithData(encodedShop) as! Shop 实体店: import Foundation import CoreData @objc(Shop) class Shop: NSManagedObject, NSCoding { @NSManaged var name: String @NSManaged var phoneNumber: […]

iOS:从JSON更新核心数据库

在我的应用程序中,我以这种方式存储来自JSON文件的数据(这是一个身份的例子) NSManagedObjectContext *context = [self managedObjectContext]; for (id element in array){ NSLog(@"element:%@", element); Str *str = [NSEntityDescription insertNewObjectForEntityForName:@"Str" inManagedObjectContext:context]; Id_loc *loc = [NSEntityDescription insertNewObjectForEntityForName:@"Id_loc" inManagedObjectContext:context]; loc.id_loc = @"id_1"; [str addLocObject:loc]; } 问题是,我从networking服务每天parsing这个JSON; 所以每天都可以改变其“Str”身份(我的JSON的一个对象)的数据和数量。 问题是,有什么更好的解决scheme来更新我的核心数据库? 我有两种可能性: 1-更新我的DB与NSFetchRequest,检查是否存在一个元素,并更新它; 如果它不存在,我应该创build它。 最后,如果一个对象不在JSON中,但它在我的核心数据库中,我应该删除它,这是一个复杂的一系列控件。 2-删除所有的核心数据分贝,并用新的JSON文件再次填充。 在你看来,有什么更好的select? 我说你在我的应用程序中,我只能读取我的分贝,我不需要删除或修改它,当我使用它。

NSPersistentStoreCoordinator在读取特定NSManagedProperty后释放NSManagedObject时抛出EXC_BAD_ACCESS

错误说明 我有一个使用核心数据(由SQLite支持)和以下NSManagedObject子类本地存储的一些应用程序 import CoreData @objc(ScoutingEventData) class ScoutingEventData: NSManagedObject { @NSManaged var id: String? @NSManaged var type: String? @NSManaged var entityId: String? @NSManaged var oldStateJson: NSData? @NSManaged var newStateJson: NSData? @NSManaged var eventDate: NSDate? func toInsertEvent() throws -> ScoutingEvent.Insert { guard let id = id else { fatalError("events should have an event id") } guard let […]

iOS中的NSOperation – 如何处理循环和嵌套的NSOperation调用来获取图像

我需要帮助了解如何处理以下用例: 说我正在写一个聊天应用程序: 启动应用程序 询问服务器( AFHTTPRequestOperation )给我一个所有新消息的列表 通过这些消息循环,看看我是否需要下载任何图像 如果是的话,再次调用服务器( AFImageRequestOperation )来获取图像 我不断收到我的托pipe对象“消息”不再在同一个上下文中的崩溃,但我只使用一个managedObjectContext 。 是因为我嵌套的调用方式,因为它们是asynchronous的? 我几乎积极的消息不会被删除在其他地方,因为我看到它。 有一点要注意的是,当我改变视图控制器似乎发生。 我启动应用程序,并在根视图控制器(RVC)上执行上面的步骤#2。 如果在下载所有图像之前触摸了“ MessageListViewController ”(MLVC),则那些没有完成下载的图像的关联消息突然没有managedObjectContext 。 以下是相关的代码: AFHTTPRequestOperation * operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:requestImageInfoURL success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { NSDictionary * JSONresponse = (NSDictionary *)JSON; if( [[[JSONresponse objectForKey:@"status"] uppercaseString] isEqualToString:@"ERROR"] ) { for( id<CommsObserver> observer in _observers ) [observer errorOccurred:[JSONresponse […]

无法find实体的NSManagedObjectModel

这是在viewDidLoad中的fetchRequest的代码,从这里find的教程后面的代码只是我编程链接导航控制器和tableview,而不是使用接口生成器。 实体ProductInfo存在。 但是,当我运行该程序时,我得到的错误: Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+entityForName: could not locate an NSManagedObjectModel for entity name 'ProductInfo'' 我已经重置模拟器,因为它是一个旧的模型,但仍然发生错误。 我也切换到使用FetchedResultsController但问题仍然存在。 问题是因为这些fetchedResultsController方法不在appdelegate内部吗? 他们目前在一个TableViewController。 我怎么解决这个问题? viewDidLoad方法: – (void)viewDidLoad{ NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription * entity = [NSEntityDescription entityForName:@"ProductInfo" inManagedObjectContext:context]; [fetchRequest setEntity:entity]; NSError * error; self.productInfos = [_context executeFetchRequest:fetchRequest error:&error]; [fetchRequest release]; […]

访问最终类的@NSManaged属性时发生Swift链接器错误

我在一个更大的项目中遇到问题,并将其简化为这个简单的代码。 为了演示目的,我使用Model.swift文件创build了一个新的Swift项目: import Foundation import CoreData class A: NSManagedObject { @NSManaged var foo: String } final class B: A { @NSManaged var bar: String } func testB(obj: B) -> String { return "\(obj.foo) \(obj.bar)" } 这编译,但链接器抱怨访问bar : Undefined symbols for architecture armv7: "__TFC21TestFinalManagedClass1Bg3barSS", referenced from: __TF21TestFinalManagedClass5testBFCS_1BSS in Model.o ld: symbol(s) not found for architecture armv7 […]

CoreData:无法加载实体的类

我在使用Core Data中的关系时遇到问题。 我创build了我的数据模型,其中包括以下实体:用户,对话,消息,参与者 – 每个实体都包含跟随它的实体的一对多关系。 我使用Editor-> Create NSManagedObject Subclass为每个实体生成类,并为每个类正确创build了.Swift文件。 该项目build立,但是当试图创build和保存一个新的用户时,我得到以下错误: 2014-12-01 12:31:28.450 Messenger[2627:151403] CoreData: warning: Unable to load class named 'Messenger.User' for entity 'User'. Class not found, using default NSManagedObject instead. 我确信我的实体类以项目/模块名称(Messenger.User)作为前缀。 我还在用户类的正上方添加了“@ObjC(用户)”,并为项目中的“其他链接器标志”添加了“-ObjC”,正如其他职位人员所build议的那样。 这些都是我可以find的所有修复,但我仍然得到相同的错误。 以下是我的User类的样子,供参考: import Foundation import CoreData @objc(User) class User: NSManagedObject { @NSManaged var api : API @NSManaged var username: String @NSManaged var […]

家长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 […]

RestKit postObject方法中的post对象和它返回的RKMappingResult之间有什么关系?

我一直在浏览RestKit的文档,但是我还没有能够解决RKMappingResult一些细节问题。 我有创buildNSManagedObject ,称为newUser ,并插入mainQueueManagedObjectContext的mainQueueManagedObjectContext的代码。 然后使用我的对象pipe理器的postObject:path:parameters:success:failure:方法将用户发布到服务器。 这似乎工作正常。 当发布请求完成时,我需要更新newUser托pipe对象上的一些字段,这些字段不会根据发布请求的结果进行映射。 传递到块中的mappingResult参数似乎具有与从服务器的响应中设置的所有字段正确映射的托pipe对象。 显然, mappingResult中的对象与我发布的对象不是同一个对象,因为它们不在同一个线程中。 如果我在发布之前保存新newUser ,请求完成后它们的objectID是否相同,并返回映射结果? 我在想象,新newUser和映射结果中的对象都指向存储在CoreData中的同一个对象,是正确的吗? 我问的原因是,这似乎并非如此。 如果我发出一个发布请求并同时保存新的newUser对象和映射结果中返回的对象,我最终在Core Data中有两个不同的对象,一个用于newUser ,一个用于映射结果。 我通过更改newUser对象和newUser对象上的字段,并确认它们都是独立更改来确认这一点。 此外,我下次获取时,获取两个用户对象。 我如何防止这种情况? 如果这是正确的,如果我崩溃会发生什么,请求还没有完成? CoreData中不会有一个存根对象吗? 如果请求失败,如何删除我创build的存根对象? 我可以在失败区域做类似以下的事情吗? dispatch_async(dispatch_get_main_queue(), ^{ [newUser.managedObjectContext deleteObject:newRegisteredUser]; }); 新用户在哪里,是我在mainQueue上创build的托pipe对象。 最后,如果我通过映射结果在后台线程中取回托pipe对象,则无法将返回的用户设置为UI用于从主线程获取信息的用户,那么如何通知用户界面改变它的用户? 我应该发布一个通知,告诉用户界面从Core Data重新获取活动用户吗? 更新关于重复的对象 我做了一些进一步的testing,我肯定会得到一个重复的对象,当职位返回。 我首先创build一个新的newUser并设置属性: HNGRRegisteredUser *newUser = [NSEntityDescription insertNewObjectForEntityForName:@"RegisteredUser" inManagedObjectContext:context]; newUser.firstName = @"John" newUser.lastName = @"Smith" newUser.gender = @"Male" newUser.email = @"js@email.com" newUser.hungrosityModel […]