标签: core-data

核心数据:删除实体所有实例的最快方法

我正在使用Core Data在本地持久保存Web服务调用的结果.Web服务返回完整的对象模型,比方说,"汽车" - 可能是大约2000个(我不能让Web服务返回任何小于1或所有汽车.

下次打开我的应用程序时,我想通过再次调用所有汽车的Web服务来刷新Core Data持久化副本,但是为了防止重复,我需要首先清除本地缓存中的所有数据.

是否有更快的方法来清除托管对象上下文中特定实体的所有实例(例如"CAR"类型的所有实体),或者我是否需要查询它们,然后遍历结果以删除每个实例,然后保存?

理想情况下,我可以说删除所有实体是Blah的地方.

core-data objective-c ios

373
推荐指数
11
解决办法
15万
查看次数

NSOrderedSet生成的访问器抛出异常

在我的Lion应用程序中,我有这个数据模型:

在此输入图像描述

subitems里面的关系Item 是有序的.

的Xcode 4.1(建4B110)为我创建的文件Item.h,Item.m,SubItem.hSubItem.h.

以下是内容(自动生成)Item.h:

#import <Foundation/Foundation.h>

#import <CoreData/CoreData.h>

@class SubItem;

@interface Item : NSManagedObject {
@private
}

@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSOrderedSet *subitems;
@end

@interface Item (CoreDataGeneratedAccessors)

- (void)insertObject:(SubItem *)value inSubitemsAtIndex:(NSUInteger)idx;
- (void)removeObjectFromSubitemsAtIndex:(NSUInteger)idx;
- (void)insertSubitems:(NSArray *)value atIndexes:(NSIndexSet *)indexes;
- (void)removeSubitemsAtIndexes:(NSIndexSet *)indexes;
- (void)replaceObjectInSubitemsAtIndex:(NSUInteger)idx withObject:(SubItem *)value;
- (void)replaceSubitemsAtIndexes:(NSIndexSet *)indexes withSubitems:(NSArray *)values;
- (void)addSubitemsObject:(SubItem *)value;
- (void)removeSubitemsObject:(SubItem *)value;
- (void)addSubitems:(NSOrderedSet *)values;
- …
Run Code Online (Sandbox Code Playgroud)

cocoa core-data xcode4

364
推荐指数
11
解决办法
5万
查看次数

核心数据与SQLite 3

我已经非常熟悉关系数据库,并且过去曾使用SQLite(和其他数据库).但是,Core Data具有一定的吸引力,因此我正在考虑花一些时间来学习它以用于我的下一个应用程序.

使用Core Data而不是SQLite有什么好处,反之亦然?每个的优点/缺点是什么?

当Apple没有将它用于许多旗舰应用程序(如Mail.app或iPhoto.app)时,我发现很难证明学习Core Data的成本是合理的 - 而是选择了SQLite数据库.SQLite也广泛用于iPhone.

那些熟悉使用它们的人可以评论他们的经历吗?或许,与大多数事情一样,问题比仅仅使用一个而不是另一个问题更深层次?

sqlite macos cocoa core-data

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

如何将iPhone核心数据与Web服务器同步,然后推送到其他设备?

我一直在研究一种方法,用于在多个设备(如iPad或Mac)之间同步存储在iPhone应用程序中的核心数据.在iOS上使用Core Data的同步框架并不多(如果有的话).但是,我一直在考虑以下概念:

  1. 对本地核心数据存储进行更改,并保存更改.(a)如果设备在线,它会尝试将变更集发送到服务器,包括发送变更集的设备的设备ID.(b)如果变更集未到达服务器,或者设备未联机,则应用程序会将更改集添加到队列中以在其联机时发送.
  2. 位于云中的服务器将其接收的特定更改集与其主数据库合并.
  3. 在云服务器上合并更改集(或更改集队列)后,服务器会使用某种轮询系统将所有这些更改集推送到向服务器注册的其他设备.(我想使用Apple的推送服务,但显然根据评论,这不是一个可行的系统.)

我需要考虑什么花哨的东西吗?我查看了REST框架,例如ObjectiveResource,Core ResourceRestfulCoreData.当然,这些都与Ruby on Rails一起使用,我并不依赖它,但它是一个开始的地方.我对我的解决方案的主要要求是:

  1. 任何更改都应该在后台发送而不会暂停主线程.
  2. 它应该使用尽可能少的带宽.

我考虑过一些挑战:

  1. 确保服务器上附加了不同设备上不同数据存储的对象ID.也就是说,我将有一个对象ID和设备ID表,它们通过对存储在数据库中的对象的引用来绑定.我将有一条记录(DatabaseId [此表是唯一的],ObjectId [整个数据库中的项目唯一],Datafield1,Datafield2),ObjectId字段将引用另一个表AllObjects:(ObjectId,DeviceId,DeviceObjectId).然后,当设备推送更改集时,它将从本地数据存储中的核心数据对象传递设备Id和objectId.然后我的云服务器将检查AllObjects表中的objectId和设备ID,并找到要在初始表中更改的记录.
  2. 所有更改都应加上时间戳,以便合并它们.
  3. 设备必须轮询服务器,而不会耗尽太多电池.
  4. 如果/当从服务器收到更改时,本地设备还需要更新内存中保存的任何内容.

还有什么我在这里失踪的吗?我应该考虑哪些框架才能实现这一目标?

iphone sync core-data ios data-synchronization

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

删除/重置核心数据中的所有条目?

您知道删除Core Data中存储的所有条目的方法吗?我的架构应该保持不变; 我只是想把它重置为空白.


编辑

我希望以编程方式执行此操作,以便用户可以实际按下reset按钮.

cocoa cocoa-touch core-data nsmanagedobject ios

229
推荐指数
13
解决办法
15万
查看次数

Xcode 4,核心数据模型版本 - 设置当前版本

我对如何在Xcode 4中执行以下功能以设置在创建版本化模型后使用的模型感到困惑.

设计>数据模型>设置当前版本

core-data xcode4

181
推荐指数
3
解决办法
3万
查看次数

用于打开商店的模型与用于创建商店的模型不兼容

我在xcode 3.2中创建了一个Core Data模型,在Xcode 4.2中升级后,我添加了NSManagedObject子类的新实体(请参阅新实体).

首先,它看起来很奇怪,因为它与旧的不在同一组中.这是我的xcode 4.2上的图片(AlkitabDB是我在xcode 3.2中创建的,EndeDB是当前xcode版本中的新版本(4.2):

新实体未分组在xdatamodel中

第二件事,我让它原样,然后我以与第一个实体(旧实体)相同的方式访问第二个实体(新实体),并出现标题错误.

这是错误:

2012-01-16 21:13:38.496 iHuria[55953:207] Unresolved error Error Domain=NSCocoaErrorDomain Code=134100 "The operation couldn’t be completed. (Cocoa error 134100.)" UserInfo=0x8829cd0 {metadata=<CFBasicHash 0x882a370 [0x1839b38]>{type = immutable dict, count = 7,
entries =>
    2 : <CFString 0x8829b90 [0x1839b38]>{contents = "NSStoreModelVersionIdentifiers"} = <CFArray 0x8829ff0 [0x1839b38]>{type = immutable, count = 0, values = ()}
    4 : <CFString 0x8829bc0 [0x1839b38]>{contents = "NSPersistenceFrameworkVersion"} = <CFNumber 0x8829770 [0x1839b38]>{value = +320, type = kCFNumberSInt64Type}
    6 : <CFString 0x8829bf0 [0x1839b38]>{contents = "NSStoreModelVersionHashes"} = …
Run Code Online (Sandbox Code Playgroud)

iphone core-data ios

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

最佳实践? - 数组/字典作为核心数据实体属性

我是Core Data的新手.我注意到集合类型不可用作属性类型,并且想知道将数组/字典类型数据存储为属性的最有效方法是什么(例如,构成街道,城市等地址的元素确实如此不需要单独的实体,并且比单独的属性/字段更方便地存储为字典/数组.谢谢.

core-data objective-c nsdictionary nsarray ios

175
推荐指数
2
解决办法
7万
查看次数

Cocoa Core Data有效计算实体的方法

我读了很多关于核心数据的内容..但是对于实体类型进行计数的有效方法是什么(比如SQL可以用SELECT count(1)...).现在我刚刚解决了这个任务,选择了所有NSFetchedResultsController并获得了计数NSArray!我相信这不是最好的方式......

core-data objective-c

171
推荐指数
7
解决办法
6万
查看次数

保存时iphone Core Data Unresolved错误

我在尝试保存时从核心数据中收到一条奇怪的错误消息但是错误不可重现的问题(在执行不同的任务时出现在不同的时间)

错误信息:

Unresolved error Domain=NSCocoaErrorDomain Code=1560 UserInfo=0x14f5480 "Operation could not be completed. (Cocoa error 1560.)", {
NSDetailedErrors = (
Error Domain=NSCocoaErrorDomain Code=1570 UserInfo=0x5406d70 "Operation could not be completed. (Cocoa error 1570.)",
Error Domain=NSCocoaErrorDomain Code=1570 UserInfo=0x14f9be0 "Operation could not be completed. (Cocoa error 1570.)"
);
}
Run Code Online (Sandbox Code Playgroud)

并且生成错误的方法是:

- (IBAction)saveAction:(id)sender {
    NSError *error;
    if (![[self managedObjectContext] save:&error]) {
        // Handle error
        NSLog(@"Unresolved error %@, %@, %@", error, [error userInfo],[error localizedDescription]);
        exit(-1);  // Fail
    }
}
Run Code Online (Sandbox Code Playgroud)

这个消息的原因有什么想法吗?认为它出现在随机时间

iphone core-data objective-c ios

169
推荐指数
3
解决办法
8万
查看次数