标签: nsmanagedobject

insertNewObjectForEntityForName:inManagedObjectContext:返回NSNumber错误?

我对CoreData非常精通,并且几年来一直使用它很少或没有困难.对于我的生活,我无法弄清楚为什么

insertNewObjectForEntityForName:inManagedObjectContext:
Run Code Online (Sandbox Code Playgroud)

突然之间又返回了某种奇怪的NSNumber实例.GDB说返回的对象是NSManagedObject的正确自定义子类,但是当我去打印NSManagedObject本身的描述时,我收到以下错误:

*** -[NSCFNumber objectID]: unrecognized selector sent to instance 0x3f26f50
Run Code Online (Sandbox Code Playgroud)

更奇怪的是,我能够使用setValue设置一些关系和属性:forKey:一切都很好.但是当我尝试设置一个特定的关系时,我收到此错误:

*** -[NSCFNumber entity]: unrecognized selector sent to instance 0x3f26f50
Run Code Online (Sandbox Code Playgroud)

我已经尝试了从干净的所有目标,重新启动mac和iPhone,甚至编辑模型,以便所讨论的关系是一个而不是多个.无论我做什么,都会出现同样的问题.有没有人见过这样的事情呢?

iphone objective-c nsmanagedobject nsmanagedobjectcontext

9
推荐指数
2
解决办法
1067
查看次数

如何在XCode调试器中调试NSManagedObjects?

在XCode调试器中,如何获得实体(NSManaged Object的子类)的值?我迷失在NSObject和_cd_XXX结构中.

iphone debugging xcode nsmanagedobject

9
推荐指数
2
解决办法
3565
查看次数

从核心数据实体获取属性值数组的有效方法是什么?

考虑以下:

NSFetchRequest *request = [[NSFetchRequest Alloc] init];
request.entity = [NSEntityDescription entityWithName:@"Person" inContext:_MOC];
request.propertiesToFetch = [NSArray arrayWithObject:@"Name"];
NSError *error = nil;
NSArray *results = [_MOC executeFetchRequest:request error:&error];
Run Code Online (Sandbox Code Playgroud)

这将返回一个Person对象数组.我想要的是Person.name来自这些对象的值数组.目前我走结果数组,提取名称并构建一个新数组.有更清洁,更快的方法吗?我已经考虑过改变request.resultType,NSDictionaryResultType但这并没有太大的收获,因为我仍然需要将字典数组转换为我需要的数组.

我已经实现了上面的解决方案,所以真的在寻找更好的方法.如果正确答案是"没有更好的方法"那就没关系,只要确保我没有错过任何东西.谢谢!

编辑:在考虑这个问题时,我质疑我需要一个值数组而不仅仅是使用托管对象数组.在任何情况下,如果那里有一个,仍然会很感激.

core-data nsfetchrequest nsmanagedobject ios

9
推荐指数
1
解决办法
1897
查看次数

创建NSManagedObject而不保存?

可能重复:
存储但是不要将NSManagedObject保存到CoreData?

我需要制作NSManagedObject而不保存它,我该怎么做?

我想这样做的原因是应用程序有一个设置,用户输入他们的详细信息,但我只想保存对象,如果他们完成设置(他们可以选择取消,在这种情况下,对象需要是丢弃而不保存,这就是为什么我不想直接插入它.

我尝试在没有上下文的情况下插入一个,但应用程序崩溃了.

我尝试过以下方法:

GuestInfo *guest;
guest = (GuestInfo *)[NSEntityDescription insertNewObjectForEntityForName:@"GuestInfo" inManagedObjectContext:nil];
Run Code Online (Sandbox Code Playgroud)

这会导致崩溃,并显示以下错误消息:

'NSInternalInconsistencyException', reason: '+entityForName: could not locate an NSManagedObjectModel for entity name 'GuestInfo''
Run Code Online (Sandbox Code Playgroud)

core-data objective-c nsmanagedobject nsmanagedobjectcontext ios

9
推荐指数
2
解决办法
8173
查看次数

在保持NSFetchedResultController功能的同时保存单个CoreData实体(不是整个上下文)

哎呀,对不起这么长的头衔.

我有一个托管对象上下文,我存储从两个不同位置派生的歌曲.我从手机上的持久存储中获取了一些歌曲(使用Core Data),我从在线数据库中提取了一些歌曲.这两首歌都属于同一个MananagedObject子类.我想这两个歌曲是在一个单一的情况下,因为我想他们两个出现在与NSFetchedResultsController连接的表视图.

当我想保存其中一首歌时会出现问题.我不想将从在线数据库中提取的所有歌曲保存到手机中.我只想保存单曲,所以简单的[moc save]不起作用.另一个问题是,在我保存单曲之后,我仍然希望从在线播放的歌曲在上下文中(但是再次,不保存).我相信我有几个不同的选择:

1)是否可以将NSFetchedResults控制器连接到多个上下文?

2)我可以将从在线数据库中提取的所有歌曲移动到单独的临时上下文中,保存在原始上下文中,然后将所有歌曲移回.(请参阅:如何将NSManagedObject从一个上下文复制或移动到另一个上下文?)

3)记住在线歌曲的所有键值对,从上下文中删除在线歌曲,保存原始上下文,根据保存的键值对将所有在线歌曲插回到原始上下文中.

4)我是一个巨大的n00b,我更容易丢失一些东西.

谢谢!

core-data nsfetchedresultscontroller nsmanagedobject nsmanagedobjectcontext ios

9
推荐指数
2
解决办法
2985
查看次数

具有布尔属性的CoreData实体保存为NSNumber对象

想知道是否有其他人遇到过这个问题,或者是否有原因并且我做错了什么.

我有一个CoreData应用程序.在模式中,我有一个'content'实体,其'unlocked'属性设置为Boolean.

但是,当我通过Xcode保存实体的Obj C类时,解锁在content.h中显示为:

@property (nonatomic, retain) NSNumber * unlocked;
Run Code Online (Sandbox Code Playgroud)

如果我在content.h中将其更改为布尔值,我会收到ARC编译错误.但是,如果我在尝试获取它时将其作为NSNumber对象保留,它会不一致地返回(如果我有一个NSLog打印它,它会在每次运行时返回不同的值).

我可以找出一个相当明显的解决方法,将解锁为NSString设置为"是"或"否"并在相关点进行比较,但我想知道是否有人知道为什么会发生这种情况或者是否有办法将它保持为布尔值.

提前致谢.

core-data nsmanagedobject ios

9
推荐指数
1
解决办法
8147
查看次数

核心数据查找或创建最有效的方式

我有大约10000个实体对象' Message'.当我添加一个新的' Message'我想首先看它是否存在 - 以及它是否只是更新它的数据,但如果它不创建它.

现在,"查找或创建"算法可以将所有Message对象保存objectID在一个数组中,然后通过它们进行过滤并获取消息existingObjectWithID:error:

这工作正常,但在我的情况下,当我使用existingObjectWithID:获取'消息'时,然后尝试通过设置'消息'对象的属性并调用保存来设置和保存属性:在它的上下文中它不能正确保存它.有没有人遇到这样的问题?

是否有更有效的方法来制作查找或创建算法?

cocoa-touch core-data objective-c nsmanagedobject nsmanagedobjectcontext

9
推荐指数
2
解决办法
2517
查看次数

如何将NSManagedObject转换为NSDictionary

我试图转换NSManagedObjectNSDictionary这是我试过的:

var keys:NSArray = order?.entity.attributesByName.keys
var dict:NSDictionary = order?.dictionaryWithValuesForKeys(keys)
Run Code Online (Sandbox Code Playgroud)

但我得到错误:

 LazyForwardCollection<MapCollectionView<Dictionary<NSObject,
 AnyObject>, NSObject>>? is not convertible to NSArray.
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?

core-data nsdictionary nsmanagedobject ios swift

9
推荐指数
1
解决办法
6926
查看次数

SwiftyJSON:将对象转换为JSON

我知道使用SwiftyJSON你可以将对象转换JSONSwift.

SwiftyJSON允许你回去吗?即将NSManagedObjects与关系进行转换并将其转换为JSON?

示例请.

nsmanagedobject swift swifty-json

9
推荐指数
1
解决办法
1万
查看次数

如何在Swift3中向实体插入新数据?

在之前的swift中,我能够使用这样的代码在我的数据模型中向我的"TestEntity"添加新数据.

NSManagedObject 是为我的"TestEntity"创建的,我能够使用"dot"语法设置其属性

最后,我会保存上下文

let entity=NSEntityDescription.insertNewObject(forEntityName: "TestEntity", into: context) as! TestEntity
entity.testAttribute="test value"
context.save()
Run Code Online (Sandbox Code Playgroud)

此代码在Swift3中不起作用.当我运行它时,我得到以下运行时错误:

无法将'NSManagedObject_TestEntity_'(0x175306b0)类型的值转换为'testCoreData.TestEntity'(0xd6bb8).2016-06-19 11:07:52.305195 testCoreData [689:264453]无法将'NSManagedObject_TestEntity_'(0x175306b0)类型的值转换为'testCoreData.TestEntity'(0xd6bb8)

任何人都可以了解如何在swift3中完成这项工作,好吗?任何帮助都非常感谢.谢谢.

问题的第二部分是如何再次访问数据.以下代码以错误结束:致命错误:NSArray元素无法匹配Swift数组元素类型

let fr:NSFetchRequest<TestEntity>=TestEntity.fetchRequest()

do {
   let searchResults=try context.fetch(fr)
   if let results=searchResults {
      for result in results {
         print("testAtt = \(result.testAtt)")
      }
   }
} catch {

}
Run Code Online (Sandbox Code Playgroud)

core-data nsmanagedobject nsentitydescription swift swift3

9
推荐指数
1
解决办法
6611
查看次数