Xcode 6.1 Mac OS X命令行工具的新项目

时间:2014-11-11 15:29:13

标签: core-data command-line-tool xcode6.1

我正在关注此iOS核心数据教程Core Data Tutorial

我的Xcode版本是6.1,而教程使用较旧版本。 当需要为Mac命令行创建一个新项目时,教程说“将类型更改为”核心数据“”,但在我的Xcode中,没有这样的核心数据选项。

那么,我该如何启动这个“核心数据”命令行项目?

3 个答案:

答案 0 :(得分:3)

我做同样的事情,完全相同的问题。我的解决方案是启动一个新的可可项目,它将为您提供一个使用Core Data的复选框。这将生成所有Core Data Stack访问gubbins。除非所有工作都在AppDelegate.m中完成,否则实现相当直接。 main()函数被applicationDidFinishLaunching :()..方法替换。

唯一需要的更改是

(NSManagedObjectModel *)managedObjectModel {
    // The managed object model for the application. It is a fatal error for the application not to be able to find and load its model.
    if (_managedObjectModel) {
        return _managedObjectModel;
    }

    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"FailedBankCD" withExtension:@"momd"];
    _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
    return _managedObjectModel;
}

(void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    // Insert code here to initialize your application
    NSManagedObjectContext *context = self.managedObjectContext;

    NSError *error = nil;
    if (![context save:&error]) {
        NSLog(@"darn... %@", error);
        exit(1);
    }

    NSError* err = nil;
    NSString* dataPath = [[NSBundle mainBundle] pathForResource:@"Banks" ofType:@"json"];
    NSArray* Banks = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:dataPath] options:kNilOptions error:&err];

//    NSLog(@"Imported Banks: %@", Banks);

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.dateFormat = @"mm/dd/yy";

    [Banks enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        FailedBankInfo *failedBankInfo = [NSEntityDescription insertNewObjectForEntityForName:@"FailedBankInfo" inManagedObjectContext:context];
        failedBankInfo.name = [obj objectForKey:@"name"];
        failedBankInfo.city = [obj objectForKey:@"city"];
        failedBankInfo.state = [obj objectForKey:@"state"];

        FailedBankDetails *failedBankDetails = [NSEntityDescription insertNewObjectForEntityForName:@"FailedBankDetails" inManagedObjectContext:context];
//        failedBankDetails.closeDate = [NSDate dateWithString:[obj objectForKey:@"closeDate"]]; //deprecated in yosemite
        failedBankDetails.closeDate = [dateFormatter dateFromString:[obj objectForKey:@"closeDate"]];
        failedBankDetails.updateDate = [NSDate date];
        failedBankDetails.zip = [obj objectForKey:@"zip"];

        failedBankDetails.info = failedBankInfo;
        failedBankInfo.details = failedBankDetails;

        NSError *error;
        if (![context save:&error]) {
            NSLog(@"darn... %@", [error localizedDescription]);
        }
    }];

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"FailedBankInfo" inManagedObjectContext:context];
    [fetchRequest setEntity:entity];
    NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];

    for (FailedBankInfo *info in fetchedObjects) {
        NSLog(@"Name: %@", info.name);
        FailedBankDetails *details = info.details;
        NSLog(@"Zip: %@", details.zip);
    }
}

祝您好运......

编辑1: 获取教程继续进行更改的SQLite数据库     if(![coordinator addPersistentStoreWithType:NSXMLStoreType configuration:nil URL:url options:nil error:& error]){ 至     if(![coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:& error]){

答案 1 :(得分:2)

我最终为seiterm建议为Mac创建了一个Cocoa应用程序。但是,创建的数据库不是sqlite格式。所以我为iOS创建了一个Cocoa Touch应用程序,使用相同的代码,它很好。

此外,如果您在查找数据库的位置时遇到问题,打开SQL调试可能会有所帮助(在其他一个教程中介绍)。这可以通过单击顶部的方案,然后单击编辑方案,运行配置 - >来完成。参数选项卡添加

 -com.apple.CoreData.SQLDebug 1 

作为一个论点。然后,当您运行应用程序时,控制台中应该有一个输出,例如:

CoreData: annotation: Connecting to sqlite database file at "/Users/doraemon/Library/....."   

指向数据库位置。

答案 2 :(得分:-2)

首先,您正在使用iOS教程开发Mac OS X应用程序。核心数据的使用在两者之间非常相似,但在您的应用程序中使用它的方式有一些明显不同(即,您通常对mac应用程序使用NSArrayController,而对于iOS应用程序使用NSFetchedResultsController )。

命令行应用程序的模板没有Core Data复选框。

对我而言,这是一个好处,因为Xcode模板中包含的核心数据代码是IMO,而不是在您的应用程序中使用它的最佳方式。

然而,话虽如此,您可以创建一个新的Cocoa应用程序,并检查以包含Core Data。这对于你想要做的事情来说已经足够了,这就是使用Core Data。

或者,您可以将代码复制/粘贴到命令行应用程序中,以设置和使用基本核心数据堆栈。确保你import核心数据模块,你应该好好去。