我正在使用Core Data在本地持久保存Web服务调用的结果.Web服务返回完整的对象模型,比方说,"汽车" - 可能是大约2000个(我不能让Web服务返回任何小于1或所有汽车.
下次打开我的应用程序时,我想通过再次调用所有汽车的Web服务来刷新Core Data持久化副本,但是为了防止重复,我需要首先清除本地缓存中的所有数据.
是否有更快的方法来清除托管对象上下文中特定实体的所有实例(例如"CAR"类型的所有实体),或者我是否需要查询它们,然后遍历结果以删除每个实例,然后保存?
理想情况下,我可以说删除所有实体是Blah的地方.
在我的Lion应用程序中,我有这个数据模型:

subitems里面的关系Item 是有序的.
的Xcode 4.1(建4B110)为我创建的文件Item.h,Item.m,SubItem.h和SubItem.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) 我一直在研究一种方法,用于在多个设备(如iPad或Mac)之间同步存储在iPhone应用程序中的核心数据.在iOS上使用Core Data的同步框架并不多(如果有的话).但是,我一直在考虑以下概念:
我需要考虑什么花哨的东西吗?我查看了REST框架,例如ObjectiveResource,Core Resource和RestfulCoreData.当然,这些都与Ruby on Rails一起使用,我并不依赖它,但它是一个开始的地方.我对我的解决方案的主要要求是:
我考虑过一些挑战:
还有什么我在这里失踪的吗?我应该考虑哪些框架才能实现这一目标?
您知道删除Core Data中存储的所有条目的方法吗?我的架构应该保持不变; 我只是想把它重置为空白.
编辑
我希望以编程方式执行此操作,以便用户可以实际按下reset按钮.
我对如何在Xcode 4中执行以下功能以设置在创建版本化模型后使用的模型感到困惑.
设计>数据模型>设置当前版本
我在xcode 3.2中创建了一个Core Data模型,在Xcode 4.2中升级后,我添加了NSManagedObject子类的新实体(请参阅新实体).
首先,它看起来很奇怪,因为它与旧的不在同一组中.这是我的xcode 4.2上的图片(AlkitabDB是我在xcode 3.2中创建的,EndeDB是当前xcode版本中的新版本(4.2):

第二件事,我让它原样,然后我以与第一个实体(旧实体)相同的方式访问第二个实体(新实体),并出现标题错误.
这是错误:
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) 我是Core Data的新手.我注意到集合类型不可用作属性类型,并且想知道将数组/字典类型数据存储为属性的最有效方法是什么(例如,构成街道,城市等地址的元素确实如此不需要单独的实体,并且比单独的属性/字段更方便地存储为字典/数组.谢谢.
我读了很多关于核心数据的内容..但是对于实体类型进行计数的有效方法是什么(比如SQL可以用SELECT count(1)...).现在我刚刚解决了这个任务,选择了所有NSFetchedResultsController并获得了计数NSArray!我相信这不是最好的方式......
我在尝试保存时从核心数据中收到一条奇怪的错误消息但是错误不可重现的问题(在执行不同的任务时出现在不同的时间)
错误信息:
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)
这个消息的原因有什么想法吗?认为它出现在随机时间
core-data ×10
ios ×6
objective-c ×4
cocoa ×3
iphone ×3
xcode4 ×2
cocoa-touch ×1
macos ×1
nsarray ×1
nsdictionary ×1
sqlite ×1
sync ×1