标签: nsmanagedobject

如何用字符串唯一标识nsmangedobject?

我正在使用核心数据和区域监控.区分受监视区域的唯一方法是使用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 nsurl nsstring nsmanagedobject

3
推荐指数
1
解决办法
4233
查看次数

核心数据保存到数据库不工作

我是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)

iphone core-data nsmanagedobject nsmanagedobjectcontext

3
推荐指数
1
解决办法
629
查看次数

核心数据NSManagedObject - 跟踪属性是否已更改

我有一个对象 - Config.我想知道Account属性是否Config已经改变.当发生这种情况时,我想发送一个NSNotification关于Account更改何时知道的所有代码.我最初的想法是在我的NSManagedObject子类,我会重写setAccount设置瞬态属性的方法AccountDidChangetrue.然后,didSave如果AccountDidChange是,true我会发送通知,然后将其设置回false.有没有更好的办法?我的问题是,从我所读到的,通过改AccountDidChange回来false,我会弄脏我的对象,需要再次保存.

更多信息:Config对象是应用程序的当前配置. Account实际上可以改为ActiveAccount.与Account实体有关系,其中包含所有帐户的列表.想法是用户可以更改应用程序的活动帐户.所以我们有一组服务器,用户一次只能登录一个. Config.Account指向该活动帐户,它用于设置与服务器的连接以检索信息.我正在使用此通知Config.Account已更改,以告知其他对象清理其信息 - 如警报列表.基本上,所有信息都是按照帐户进行的,因此需要将其删除,然后在下次加载时使用新的活动帐户重新获取.

此外,给定的名称不是我的实际对象名称 - 只是试图使示例更容易遵循.

cocoa core-data objective-c nsmanagedobject ios

3
推荐指数
1
解决办法
4282
查看次数

创建NSManagedObject的副本

我需要暂时将a的内容存储NSManagedObject到字典中.因为核心数据有自己的内存管理程序,所以我不想保留任何指向NSManagedObject字段的强指针,此时只有值感兴趣(值在视图控制器之间传递,MOC不同).我无法创建弱指针,因为我想控制内存回收何时完成.

我尝试了一些事情,都失败了或者不符合目的.

  1. 重复[[myNSMO alloc] initWithEntity:[NSEntityDescription entityForName:entity inManagedObjectContext:myNSMO.managedObjectContext] insertIntoManagedObjectContext:nil]; 它是有效的,但不适合我的应用程序设计(没有深入细节)

  2. NSDictionary从中生成一个NSManagedObject,使用[myNSMO dictionaryWithValuesForKeys:<#(NSArray *)#>].这不好,因为它返回一个包含NSManagedObject字段地址的字典.

  3. NSDictionary使用copyWithZone 创建一个填充每个键值,这样也 [myDictionary setObject:[myNSMO.field copyWithZone:nil] forKey:@"Key"]; 不起作用,我仍然得到字段地址...

  4. 手动输入每个字段 [myDictionary setObject:[NSString stringWithFormat:@"%@",myNSMO.field ] forKey:@"Key"]; 这次很好,我确实获得了新的内存分配.但手动编码很费时间......

有人发现聪明的方法吗?选项1)不起作用的原因是因为我使用字典作为队列.我首先存储对象的副本,然后在需要时弹出输入.然后将该特定字典条目的副本返回给ask方法.问题是,我不能创建的副本,NSManagedObject这是使用创建[[...] insertIntoManagedObjectContext:nil];

有解决方案吗

core-data nsdictionary nsmanagedobject ios

3
推荐指数
1
解决办法
2864
查看次数

上下文不保存更改,错误1550

我正在尝试更新实体并保存更改.我总是得到以下错误:

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

3
推荐指数
1
解决办法
6369
查看次数

NSManagedObject类并创建一个Setter方法

因此,在常规类中,您可以覆盖类属性的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)

给我一个错误,并建议我更换_hasNewDatahasNewData.

这是应该怎么做或它会给我一个无限循环?

我希望它随时更新我NSManagedObject的属性.modifyDatehasNewData

core-data objective-c nsmanagedobject ios

3
推荐指数
1
解决办法
434
查看次数

在不同的线程上访问NSManagedObject的objectID?

我的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

3
推荐指数
1
解决办法
1617
查看次数

从Swift中的Core Data接收的排序数组

我的实体有一个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)的数组进行排序?

nsarray nsmanagedobject ios swift ios8

3
推荐指数
1
解决办法
3679
查看次数

核心数据实体的瞬态和派生属性之间的差异

核心数据实体的瞬态和派生属性之间有什么区别?我想创建一个"虚拟"属性,可以在获取操作中使用该属性从核心数据实体返回本地化的国家/地区名称.

操作将以这种方式完成:

  1. 用英语从数据库中检索国家名称
  2. 执行NSLocalizedString(countryNameInEnglish,nil)以获取本地化的国家/地区名称.

2将由这个"虚拟"属性完成.

我应该使用哪一个?瞬态或衍生的,我该怎么做?

我没有什么可以告诉你的,因为我不知道我应该使用什么.

谢谢

cocoa-touch core-data nsfetchedresultscontroller nsmanagedobject ios

3
推荐指数
1
解决办法
4239
查看次数

"错误:当iCloud推送托管对象时,此过程调用了一个NSArray-taking方法......"

对于通过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方法

对象之间的核心数据关系

但是,它们都没有为我的问题提供任何解决方 现在一切都很好,但"很快就会让你感到悲伤."

如果这里没有解决,我将把这个问题与苹果开发支持联系起来.

core-data nsset nsmanagedobject icloud ios8

3
推荐指数
1
解决办法
424
查看次数