我對這次派對有點遲到,但我爲GroceryList做了類似的事情。我的數據存儲在我需要在CoreData sqlite存儲中的plist文件中。我編寫了一個命令行基礎工具,該工具在我的Mac上運行,分析plist文件,然後使用我的Core Data對象模型創建一個sqlite存儲。我運行這個命令行工具作爲我的構建的一部分(對於一些構建配置),以便我可以隨意重新生成數據。要在xcode中創建這種工具,請選擇文件 - >新建項目 - > Mac OS X - >命令行工具,然後從「類型」菜單中選擇「核心數據」。下面是一些示例代碼:
#import <objc/objc-auto.h>
int main (int argc, const char * argv[]) {
objc_startCollectorThread();
//You may not know this, but NSUserDefaults can be used to parse command line arguments!
//in this case, the arguments are passed in like this:
// -fullMomPath /hd/some/path/file.mom -fullStorePath /hd/some/path/file.sql
//by passing in the storePath, the calling script knows where the sqlite file will be and can copy it to the resulting application bundle
NSUserDefaults *args = [NSUserDefaults standardUserDefaults];
NSString *momPath = [args stringForKey:@"fullMomPath"];
NSString *storePath = [args stringForKey:@"fullStorePath"];
// Create the managed object context
NSManagedObjectContext *context = managedObjectContext(momPath, storePath);
//build and save your NSManagedObjects here
//in my case, i parse some plist files and create GroceryList type stuff, but whatever you do is your business.
return 0;
}
NSManagedObjectModel *managedObjectModel(NSString* momPath) {
static NSManagedObjectModel *model = nil;
if (model != nil) {
return model;
}
NSURL *modelURL = [NSURL fileURLWithPath:momPath];
model = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return model;
}
NSManagedObjectContext *managedObjectContext(NSString* momPath, NSString* storePath) {
static NSManagedObjectContext *context = nil;
if (context != nil) {
return context;
}
context = [[NSManagedObjectContext alloc] init];
NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: managedObjectModel(momPath)];
[context setPersistentStoreCoordinator: coordinator];
NSString *STORE_TYPE = NSSQLiteStoreType;
NSURL *url = [NSURL fileURLWithPath:storePath];
NSError *error;
NSPersistentStore *newStore = [coordinator addPersistentStoreWithType:STORE_TYPE configuration:nil URL:url options:nil error:&error];
if (newStore == nil) {
NSLog(@"Store Configuration Failure\n%@",
([error localizedDescription] != nil) ?
[error localizedDescription] : @"Unknown Error");
}
return context;
}
通過應用程序,你的意思是讓Xcode生成模式?還是模式只能在運行時建立? – 2009-11-21 00:04:58
我不是100%確定。我想說它是在運行時生成的(我相信CoreData init的一部分是爲了在需要時使數據存儲保持最新狀態),但是您需要仔細檢查。 – 2009-11-21 00:38:21
Xcode不會生成模式。這是一個運行時操作。 – 2009-11-21 03:42:30