考虑以下:
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但这并没有太大的收获,因为我仍然需要将字典数组转换为我需要的数组.
我已经实现了上面的解决方案,所以真的在寻找更好的方法.如果正确答案是"没有更好的方法"那就没关系,只要确保我没有错过任何东西.谢谢!
编辑:在考虑这个问题时,我质疑我需要一个值数组而不仅仅是使用托管对象数组.在任何情况下,如果那里有一个,仍然会很感激.
我需要制作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
我知道使用SwiftyJSON你可以将对象转换JSON为Swift.
SwiftyJSON允许你回去吗?即将NSManagedObjects与关系进行转换并将其转换为JSON?
示例请.
我使用NSManagedObject类的isUpdated实例方法跟踪我的'对象'.
当我修改现有对象时,它可以正常工作.
如果我使用例如创建一个新对象:
[NSEntityDescription insertNewObjectForEntityForName:@"Entity" inManagedObjectContext:managedObjectContext]
Run Code Online (Sandbox Code Playgroud)
我不能使用isUpdated,我必须使用isInserted.
这是有效的,但我想检查,如果对象已被新数据修改.
无论对象是否已被更改,isInserted都将返回FALSE,只有在插入或不插入时才会注意...
我能用什么?我可以跟踪对象属性的初始状态,但我更喜欢isUpdated方法.
谢谢!!!
河
我正在尝试删除托管对象上下文,但不是删除对象本身,而是将所有即时变量设置为null.在删除NSManagedObjectContext的瞬间时,我做错了什么?
@implementation MyManagedObject
- (BOOL)submitToServer
{
if (/*submitted successfully*/)
{
return YES;
}
else
{
[self.managedObjectContext deleteObject:self];
return NO;
}
}
@end
Run Code Online (Sandbox Code Playgroud) 我偶尔会看到像这样的堆栈跟踪崩溃:
0 libobjc.A.dylib 0x97dc0edb objc_msgSend + 27
1 com.apple.CoreData 0x97edcdc2 -[_PFManagedObjectReferenceQueue _queueForDealloc:] + 162
2 com.apple.CoreData 0x97edccbe -[NSManagedObject release] + 94
3 com.apple.CoreFoundation 0x9318ef38 CFRelease + 152
4 com.apple.CoreFoundation 0x931a7460 __CFBasicHashStandardCallback + 384
5 com.apple.CoreFoundation 0x931a706e __CFBasicHashDrain + 478
6 com.apple.CoreFoundation 0x9318f101 _CFRelease + 353
7 com.apple.CoreFoundation 0x931bbc6d _CFAutoreleasePoolPop + 253
8 com.apple.Foundation 0x973270aa NSPopAutoreleasePool + 76
9 com.apple.Foundation 0x97326fd2 -[NSAutoreleasePool drain] + 130
10 com.apple.AppKit 0x95087185 -[NSApplication run] + 627
11 com.apple.AppKit 0x9507f2d9 NSApplicationMain + 574
12 com.karelia.Sandvox 0x70001ef6 …Run Code Online (Sandbox Code Playgroud) 是否可以找到保存后在托管对象上保存的属性?例如,我有人在监听托管对象上下文保存(NSManagedObjectContextDidSaveNotification),我想知道对象的哪些属性已保存.
core-data objective-c nsmanagedobject nsmanagedobjectcontext
我的iOS应用程序通过多个线程使用核心数据.我收到一些崩溃报告,其中包含以下消息:"'NSObjectInaccessibleException',原因:'CoreData无法解决'0x1e07a9b0''的错误
我理解是什么导致了这个问题 - 该对象被删除但另一个线程正试图访问它.我正在努力解决问题,但我想在后台线程中添加一个检查以查看对象是否会以这种方式出错.
我的代码目前与之相关myObject.myValue.是否可以进行一些检查,例如:
if (!myObject.myValue) {
return;
}
Run Code Online (Sandbox Code Playgroud)
...在做任何可能导致崩溃的事情之前,它会退出方法吗?或者只是调用myObject.myValue,甚至查看它是否为null,会导致抛出这样的异常?
我通过以下关系访问核心数据对象:
pArret.zzone?.libelle
Run Code Online (Sandbox Code Playgroud)
第一个对象与第二个对象具有To-one关系,并且libelle是第二个对象的属性.
我收到以下错误: -[_NSCoreDataTaggedObjectID libelle]: unrecognized selector sent to instance 0xd00000000e30000c.我不知道这个私有_NSCoreDataTaggedObjectID类是什么,为什么我没有NSManagedObject按预期获得我的子类?
我正在使用私有托管对象上下文来创建一些新对象到持久性存储中,然后在保存私有MOC之后,使用它们将它们合并到主MOC中mergeChangesFromContextDidSaveNotification.这工作正常,并根据需要更新UI,并且NSManagedObjectContextWillSaveNotification不会在此处调用mainMOC.
然后我对mainMOC使用UI 进行了一些更改,并听取了NSManagedObjectContextWillSaveNotification.通知已发布,但它不仅包含我所做的编辑,还包含从PrivateMOC使用中合并的对象mergeChangesFromContextDidSaveNotification.
有没有办法mainContext在后续contextDidChange通知中忽略从另一个上下文合并到的更改?
这是设置:
- (void) loadData {
privateContext = [[NSManagedObjectContext alloc] initWithConcurrencyType: NSPrivateQueueConcurrencyType];
privateContext.persistentStoreCoordinator = self.mainContext.persistentStoreCoordinator;
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(contextWillSave:)
name:NSManagedObjectContextWillSaveNotification
object: self.mainContext];
NSManagedObject *object = [NSEntityDescription insertNewObjectForEntityForName:record.recordType inManagedObjectContext: self.privateContext];
// fill in object
if ([self.privateContext hasChanges]) {
[self savePrivateContextAndMergeWithMainContext: self.privateContext];
}
}
- (void) savePrivateContextAndMergeWithMainContext: (NSManagedObjectContext *) privateContext {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(privateContextDidChange:) name:NSManagedObjectContextDidSaveNotification object:privateContext];
__block NSError *error = …Run Code Online (Sandbox Code Playgroud) nsmanagedobject ×10
core-data ×8
ios ×6
iphone ×2
objective-c ×2
cocoa ×1
crash ×1
swift ×1
swifty-json ×1