我正在使用核心数据和区域监控.区分受监视区域的唯一方法是使用NSString作为标识符.我喜欢使用NSManagedObjectID,但我无法让它工作.
我尝试过的:
NSURL *objURL = [managedObjectID URIRepresentation];
NSError *err;
NSString *identifier = [NSString stringWithContentsOfURL:myURL
encoding:NSASCIIStringEncoding
error:&err];
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
The operation couldn’t be completed. (Cocoa error 256.)
Run Code Online (Sandbox Code Playgroud)
有更好的方法吗?或者我做错了什么?
我是iPhone的第一次Core Data用户/学习者,我认为这[managedObjectContext save:$error]用于保存对Persistant Store的更改.
但是当我重新加载并调用NSFetch时,对象仍然存在.有什么想法吗?
for (int i ; i < [mutableFetchResults count];i++)
{
NSManagedObject *toDelete = [mutableFetchResults objectAtIndex:i];
[managedObjectContext toDelete];
// Update the array and table view.
[mutableFetchResults removeObjectAtIndex:i];
}
if (![managedObjectContext save:&error]) {
// Handle the error.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
exit(-1); // Fail
}
Run Code Online (Sandbox Code Playgroud) 我有一个对象 - Config.我想知道Account属性是否Config已经改变.当发生这种情况时,我想发送一个NSNotification关于Account更改何时知道的所有代码.我最初的想法是在我的NSManagedObject子类,我会重写setAccount设置瞬态属性的方法AccountDidChange来true.然后,didSave如果AccountDidChange是,true我会发送通知,然后将其设置回false.有没有更好的办法?我的问题是,从我所读到的,通过改AccountDidChange回来false,我会弄脏我的对象,需要再次保存.
更多信息:Config对象是应用程序的当前配置. Account实际上可以改为ActiveAccount.与Account实体有关系,其中包含所有帐户的列表.想法是用户可以更改应用程序的活动帐户.所以我们有一组服务器,用户一次只能登录一个. Config.Account指向该活动帐户,它用于设置与服务器的连接以检索信息.我正在使用此通知Config.Account已更改,以告知其他对象清理其信息 - 如警报列表.基本上,所有信息都是按照帐户进行的,因此需要将其删除,然后在下次加载时使用新的活动帐户重新获取.
此外,给定的名称不是我的实际对象名称 - 只是试图使示例更容易遵循.
我需要暂时将a的内容存储NSManagedObject到字典中.因为核心数据有自己的内存管理程序,所以我不想保留任何指向NSManagedObject字段的强指针,此时只有值感兴趣(值在视图控制器之间传递,MOC不同).我无法创建弱指针,因为我想控制内存回收何时完成.
我尝试了一些事情,都失败了或者不符合目的.
重复[[myNSMO alloc] initWithEntity:[NSEntityDescription entityForName:entity inManagedObjectContext:myNSMO.managedObjectContext] insertIntoManagedObjectContext:nil];
它是有效的,但不适合我的应用程序设计(没有深入细节)
NSDictionary从中生成一个NSManagedObject,使用[myNSMO dictionaryWithValuesForKeys:<#(NSArray *)#>].这不好,因为它返回一个包含NSManagedObject字段地址的字典.
NSDictionary使用copyWithZone 创建一个填充每个键值,这样也
[myDictionary setObject:[myNSMO.field copyWithZone:nil] forKey:@"Key"];
不起作用,我仍然得到字段地址...
手动输入每个字段
[myDictionary setObject:[NSString stringWithFormat:@"%@",myNSMO.field ] forKey:@"Key"];
这次很好,我确实获得了新的内存分配.但手动编码很费时间......
有人发现聪明的方法吗?选项1)不起作用的原因是因为我使用字典作为队列.我首先存储对象的副本,然后在需要时弹出输入.然后将该特定字典条目的副本返回给ask方法.问题是,我不能创建的副本,NSManagedObject这是使用创建[[...] insertIntoManagedObjectContext:nil];
有解决方案吗
我正在尝试更新实体并保存更改.我总是得到以下错误:
The operation couldn’t be completed. (Cocoa error 1550.)
Run Code Online (Sandbox Code Playgroud)
方法:
- (BOOL) updateEvent:(EventDTO*)eventDTO{
BOOL saved = YES;
[self getDataCoreContext];
if (context) {
NSError *error;
Event *myEvent = (Event *)[context existingObjectWithID:eventDTO.entitysID error:&error];
myEvent.name = eventDTO.name;
myEvent.descrptn = eventDTO.description;
myEvent.date = eventDTO.date;
myEvent.locLatitude = [eventDTO getLatidude];
myEvent.locLongitude = [eventDTO getLongitude];
myEvent.numberOfInvited= [NSNumber numberWithInteger:[eventDTO.invitedMembers count]];
for (User *invUser in eventDTO.invitedMembers) {
[myEvent addInvitedUsersObject:invUser];
}
for (User *accUser in eventDTO.acceptedMembers) {
[myEvent addAcceptedUsersObject:accUser];
}
myEvent.createdBy = (User*)[context existingObjectWithID:eventDTO.creator.objectID error:&error];
if (![context save:&error]) {
NSLog(@"Whoops, …Run Code Online (Sandbox Code Playgroud) core-data objective-c nsmanagedobject nsmanagedobjectcontext
因此,在常规类中,您可以覆盖类属性的setter方法:
-(void)setSortBy:(NSString *)sortBy {
// Do other stuff
_sortBy = sortBy;
}
Run Code Online (Sandbox Code Playgroud)
使用它_可以防止方法的无限循环调用它自己.
我试图用NSManagedObject类做类似的事情,但它没有给出使用下划线(_)的选项:
-(void)setHasNewData:(NSNumber *)hasNewData {
// update self.modifiyDate
_hasNewData = hasNewData;
}
Run Code Online (Sandbox Code Playgroud)
给我一个错误,并建议我更换_hasNewData到hasNewData.
这是应该怎么做或它会给我一个无限循环?
我希望它随时更新我NSManagedObject的属性.modifyDatehasNewData
我的UITableViewCell内容创建的一部分因一个对象(CoreData NSManagedObject)初始访问时发生的错误而延迟.这表现在一个小的打嗝,细胞首先滚动到视图中.我决定将这些对象的访问权限推送到后台线程.
这就是我实现它的方式,它运行良好,但我们都知道我们不应该在另一个线程中访问一个线程(主线程)的NSManagedObjectContext,但是我们可以在第二个线程中获取对象的objectID它最初是在第一个线程中获取的?
获取objectID需要花费很少的时间,我希望将其他所有东西都推到后台.
MyRecord *record = [self.frc objectAtIndexPath: indexPath];
// Should the following be here or can it be below in the background thread?
// NSManagedObjectID *recordObjectID = record.objectID;
dispatch_async(_recordViewQueue, ^(void) {
if ([cell.origIndexPath isEqual:indexPath]) {
// should the following be here or above? It works here, but am I just lucky?
// this call seems to take about 2/100 of a second
NSManagedObjectID *recordObjectID = record.objectID;
NSManagedObjectContext *bgndContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSConfinementConcurrencyType];
bgndContext.persistentStoreCoordinator = App.sharedApp.storeCoordinator;
MyRecord *newRecord = …Run Code Online (Sandbox Code Playgroud) core-data grand-central-dispatch nsmanagedobject nsmanagedobjectcontext ios
我的实体有一个NSManagedObject自己的类(BPMonitor) - BPMonitor:
import UIKit
import CoreData
@objc(BPMonitor)
class BPMonitor: NSManagedObject {
@NSManaged var sisPress: String
@NSManaged var diaPress: String
@NSManaged var hbPress: String
@NSManaged var datePress: NSDate
}
Run Code Online (Sandbox Code Playgroud)
在代码中,我从Core Data接收数据到数组:
var results:[BPMonitor]=[]
...
...
Run Code Online (Sandbox Code Playgroud)
我如何按降序对field datePress(NSDate)的数组进行排序?
核心数据实体的瞬态和派生属性之间有什么区别?我想创建一个"虚拟"属性,可以在获取操作中使用该属性从核心数据实体返回本地化的国家/地区名称.
操作将以这种方式完成:
2将由这个"虚拟"属性完成.
我应该使用哪一个?瞬态或衍生的,我该怎么做?
我没有什么可以告诉你的,因为我不知道我应该使用什么.
谢谢
cocoa-touch core-data nsfetchedresultscontroller nsmanagedobject ios
对于通过iCloud update发送的每个托管对象,此警告/错误将发送到控制台:
***错误:此进程调用了一个NSArray-taking方法,例如initWithArray:,并传入一个NSSet对象.现在正在解决这个问题,但很快就会让你感到悲痛.
我的托管对象是客户端,与评估有一对多的关系,如下所示.
class Client: NSManagedObject {
//other NSManaged vars are here
@NSManaged var assessment: NSOrderedSet
}
Run Code Online (Sandbox Code Playgroud)
从这个错误的时间(在无处不在的更新期间)以及这是我在项目中唯一使用NSSet对象的事实来判断,我可以假设在更新期间,当一个函数在期望NSArray时传递一个NSOrderedSet.
关闭iCloud可以消除错误.
我发现另外两个人有一个非常相似的问题: 使用iCloud启用Core Data NSArray-taking方法
但是,它们都没有为我的问题提供任何解决方 现在一切都很好,但"很快就会让你感到悲伤."
如果这里没有解决,我将把这个问题与苹果开发支持联系起来.
nsmanagedobject ×10
core-data ×9
ios ×6
objective-c ×3
ios8 ×2
iphone ×2
cocoa ×1
cocoa-touch ×1
icloud ×1
nsarray ×1
nsdictionary ×1
nsset ×1
nsstring ×1
nsurl ×1
swift ×1