标签: nsmanagedobject

NSPredicate语法以排除给定的NSManagedObject

我有一个Core Data存储,其中许多实体应该是其特定NSEntityDescription的唯一实例.我目前通过为给定的描述创建一个新实体来做到这一点,然后:

-(void)clearMyManagedObjectsExceptFor:(NSManagedObject*)except {

    NSArray *managedObjects = [ self fetchMyManagedObjectsWithPredicateOrNil: nil ];
    // returns all managed objects for a given NSEntityDescription

    NSManagedObject *managedObject;
    for( NSUInteger i = 0; i < [ managedObjects count ]; i++ ){
        managedObject = [ managedObjects objectAtIndex: i ];
        if( ![ managedObject isEqual: except ] ){
            [ managedObjectContext deleteObject: managedObject ];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个有效,但感觉我应该能够做到这一点!=使用NSPredicate而不是迭代,但我无法弄清楚正确的谓词语法.任何人都可以开导我吗?

iphone core-data nspredicate nsmanagedobject

2
推荐指数
1
解决办法
2128
查看次数

确定NSManagedObject属性是否可选

我正在使用Core Data并且有一个NSManagedObject被调用的子类Person(它是Core Data中的一个实体).Person对象具有多个特性(例如firstName,lastName等)和关系(例如friends,coWorkers).其中一些属性是可选的,而其他属性是强制性的.

给定一个Person对象如何有效地确定特定属性或关系是可选的还是强制的?

我想尝试避免必须通过Person对象的每个属性进行某种低效的循环,因为我需要经常调用代码,所以类似于下面的伪代码的东西是完美的:

if ( [[aPerson getProperty:@"firstName"] isOptional] ) {

    // do stuff

}
Run Code Online (Sandbox Code Playgroud)

......但我不确定是否可以这样做.上面的伪代码也只会检查属性,所以我猜测在检查属性是一种关系的情况下还需要做其他事情.

我意识到,执行单个循环并将所有必需属性的名称存储在数组中可能更有效(然后只检查该数组是否存在属性名称)这就是我现在正在做的事情,但是不幸的是,它并没有真正适用于我的代码结构(因此需要更多的"按需"方法).

任何帮助将不胜感激 :)

iphone core-data objective-c nsmanagedobject ios

2
推荐指数
1
解决办法
1006
查看次数

如何获得NSAttributeDescription?

我有一个User : NSManagedObject.获得NSAttributeDescription它的userID属性的最佳方法是什么?

core-data objective-c nsmanagedobject nsentitydescription nsattributedescription

2
推荐指数
1
解决办法
1114
查看次数

没有核心数据自动处理反向关系

我有3个这样的实体:

对不起,这个图片有一个问题,即

对不起,这个图片有一个问题,即"周"实体的"日"关系应该是多个,关系结束时应该有2个箭头

现在这里有两个问题.

1.对于任何Day-Class(NSManagedObject的自定义子类)对象,在我关注它之间的关系之后:

Week* aWeek;
Day *aDay;
[aWeek addDayObject:aDay];
Run Code Online (Sandbox Code Playgroud)

然后,我可以真正找到通过周实体的关系"日",

但相反,我发现日间对象"aDay"的关系"thisWeek"仍为零.

我听说你创建了NSMangedObject的子类之后,就得到了类似的方法

- (void)addXXXObject:(xxx)xxx
Run Code Online (Sandbox Code Playgroud)

帮助您处理多对多关系,并自动处理反向关系.

但这里似乎没有.所以我必须自己处理反向关系,

或者如果核心数据确实提供了,我如何使其自动添加对象关系?

第2位.假设有许多"日",其中一个"周",由他们的关系相连,

我想要的是,每当用户删除其中一天时,我们会检查周是否仍有一些天关系,

如果是,只要让用户删除该日,

如果没有,我们也删除"周"对象.

那么我应该使用多少关系的删除规则呢?

我对这些规则不太清楚..

谢谢!

inverse one-to-many relationship nsmanagedobject ios

2
推荐指数
1
解决办法
2037
查看次数

MagicalRecord Insert太慢了

我使用MagicalRecord并且必须立即在我的数据库中插入几个(比如大约50个)记录.这大约需要3秒钟.这些插件是正常的时间吗?我可以加快速度吗?我也想知道为什么我在后台和主线程中得到一个保存语句...

保存每个元素我得到这个LOG:

2012-07-10 21:27:55.319 MyApp[9815:1b53] -[NSManagedObjectContext(MagicalSaves) MR_saveWithErrorCallback:](0x47f2e0) -> Saving <NSManagedObjectContext: 0x47f2e0>: ***   BACKGROUND SAVE *** Context 
2012-07-10 21:28:13.024 MyApp[9815:707] -[NSManagedObjectContext(MagicalSaves) MR_saveWithErrorCallback:](0x480310) -> Saving <NSManagedObjectContext: 0x480310>: *** DEFAULT *** Context *** MAIN THREAD ***
Run Code Online (Sandbox Code Playgroud)

上下文是默认值:

NSManagedObjectContext *context = [NSManagedObjectContext MR_defaultContext];    
Run Code Online (Sandbox Code Playgroud)

插入代码如下所示:

theWord = [Word MR_createEntity];
theWord.text = aCard.word;
theWord.playCount = [NSNumber numberWithInt:0];
theWord.user = user;    
[context MR_save];
Run Code Online (Sandbox Code Playgroud)

xcode objective-c nsmanagedobject magicalrecord

2
推荐指数
1
解决办法
955
查看次数

NSPrivateQueueConcurrencyType未正确保存

调用以下方法以便从我的应用服务器获取信息Core-Data之后填充AFNetworking.

这些信息似乎完全正常,因为当表格更新时,我可以看到新的信息正在更新中UITableView.

现在我遇到的问题是,即使我可以看到信息(从服务器取出后,存储到Core-data中并重新显示在我的内容中UITableView)如果我然后关闭我的应用并重新打开它,信息不再存在了.

似乎信息不是持久的,问题似乎是线程.鉴于如果我删除我的方法中的线程选项一切正常.

我错过了什么?我尝试了大多数我遇到的事情,但似乎无法找到解决方案.

NSManagedObjectContext *childContext = [[NSManagedObjectContext alloc]
                                        initWithConcurrencyType:NSPrivateQueueConcurrencyType];
childContext.parentContext = managedObjectContext;
myModel.context = childContext;


   [childContext performBlock:^{
// ... Lots Controller logic code that then calls the class myModel where all my Core-Data save methods are

    // Sort Wall Pictures
                    if ( [dataHolder[@"verb"] isEqualToString:@"addWallPicture"] ) {
                        data = @{  @"resourceID":dataHolder[@"_id"][@"$id"],
                                   @"resourceName":dataHolder[@"details"][@"resourceName"],
                                   @"author":@{ @"id":dataHolder[@"userId"][@"$id"],
                                                @"username":dataHolder[@"details"][@"authorName"] },
                                   @"likesNumber":@0,
                                   @"likesPeople":@[]
                                   };

                        [myModel saveSocialWall:data date:date verb:dataHolder[@"verb"] code:dataHolder[@"_id"][@"$id"] myUser:myUser];
                        continue;
                    }
[childContext save:&error];
}];
Run Code Online (Sandbox Code Playgroud)

cocoa cocoa-touch core-data objective-c nsmanagedobject

2
推荐指数
1
解决办法
1554
查看次数

缓存NSMangagedObject实例是一个坏主意吗?

我有一个名为Product的核心数据实体,最初在用户首次登录应用程序时填充.如果用户请求刷新,则可以再次加载它.

在应用程序的多个位置查询Product实体.所以,我决定实现一个可以在应用程序中共享的简单缓存.缓存将Product NSManagedObjects保存在地图中.这是一个坏主意吗?

ProductCache类:

@interface ProductCache ()
@end

@implementation ProductCache {

}
static NSDictionary *productsDictionary = nil;
static ProductCache *sharedInstance;

+ (ProductCache *)sharedInstance {
    @synchronized (self) {
        if (sharedInstance == nil) {
            sharedInstance = [[self alloc] init];
            [sharedInstance reload];
        }
    }
    return sharedInstance;
}

- (void) reload{
    NSMutableDictionary *productsMap = [[NSMutableDictionary alloc] init];
    CIAppDelegate *delegate = (CIAppDelegate *) [UIApplication sharedApplication].delegate;
    NSManagedObjectContext *managedObjectContext = delegate.managedObjectContext;
    NSArray *allProducts = [CoreDataManager getProducts:managedObjectContext];
    for (Product *product in allProducts) {
        [productsMap setObject:product forKey:product.productId];
    }
    productsDictionary …
Run Code Online (Sandbox Code Playgroud)

caching core-data nsmanagedobject ios7

2
推荐指数
1
解决办法
351
查看次数

如何在swift中将子类NSManagedObject分配给var(而不是常量)

我有一个完整的Juice对象的实例变量数组,它是从子类中NSManagedObject获取的子类NSFetch.

我设置这样的UITableViewCell标题,没有问题:

let currentJuice = juiceList[indexPath.row]

cell.text = currentJuice.name
Run Code Online (Sandbox Code Playgroud)

但是,我正在尝试传递Juice视图控制器之间的实例.我声明了一个实例变量var selectedJuice = Juice()变量然后在willSelectRowAtIndexPathI put中:

 selectedJuice = juiceList[indexPath.row]
Run Code Online (Sandbox Code Playgroud)

此行引发错误CoreData: error: Failed to call designated initializer on NSManagedObject class,我无法弄清楚原因!我也不知道如何在Juice类中实现指定的init方法,如果有人可以帮助那个

core-data nsmanagedobject ios swift

2
推荐指数
1
解决办法
343
查看次数

重置存储时核心数据崩溃:'无法从此NSManagedObjectContext的协调器访问对象的持久存储'

尝试在我用swift编写的iOS应用程序中删除Core数据的持久存储时,我遇到了崩溃.流程是直截了当的:当我从应用程序注销时,我删除了商店:

destroyPersistentStoreAtURL

我在应用程序中使用本机核心数据实现,并且使用performBlock/performBlockAndWait在托管对象中进行每次访问.此外,这些操作位于NSOperation队列中.流程如下:

  1. 登出
  2. cancelAllOperations&waitUntilAllOperationsAreFinished在执行performBlocks的队列上
  3. performBlocks队列中的maxConcurrentOperationCount = 1
  4. 最后,我添加了一个操作,它破坏了之前NSOperationQueue中的持久存储

有时,我遇到了崩溃,我无法理解为什么.从我看到的,它是与managedObjectsIDs和retain相关的东西.看一看:

destroyPersistentStoreAtURL
Run Code Online (Sandbox Code Playgroud)

任何帮助深表感谢!

core-data nsmanagedobject nsmanagedobjectcontext ios swift

2
推荐指数
1
解决办法
2259
查看次数

创建NSManagedObject类时,Apple Mach-O链接器在Coredata项目中出错

我有一个包含Core Data,storyBoard和3个类的项目.Core Data的目的是在MapKit上保存位置,但是当我创建NSManagedObject的子类"Spot"时,我得到了这个Buildtime错误.它说:

duplicate symbol _OBJC_METACLASS_$_Spot in:
    /Users/vitorferreira/Library/Developer/Xcode/DerivedData/CoreDataCity-buwqjxltijduybepebqqghhkrqwe/Build/Intermediates/CoreDataCity.build/Debug-iphonesimulator/CoreDataCity.build/Objects-normal/i386/Spot.o
    /Users/vitorferreira/Library/Developer/Xcode/DerivedData/CoreDataCity-buwqjxltijduybepebqqghhkrqwe/Build/Intermediates/CoreDataCity.build/Debug-iphonesimulator/CoreDataCity.build/Objects-normal/i386/Spot+CoreDataClass.o
ld: 2 duplicate symbols for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)

在之前的评论中(这是一个经过编辑的问题) - 据说原因是图书馆中存在重复的代码......但老实说,我没有得到它......任何帮助都会得到很大的帮助

core-data build-time nsmanagedobject ios

2
推荐指数
1
解决办法
963
查看次数