Xcode 6.1 Mac OS X новый проект для инструмента командной строки
Я следую этому учебнику iOS core data, Core Data Tutorial
Моя версия Xcode-6.1, в то время как учебник использует более старую версию. Когда требуется создать новый проект для командной строки Mac, в учебнике говорится: "измените тип на "Core Data"", но в моем Xcode такой опции Core Data нет.
Итак, как мне запустить этот проект командной строки "основные данные"?
3 ответа:
Я делаю почти то же самое, с той же самой проблемой. Мое решение состояло в том, чтобы начать новый проект cocoa, который даст вам флажок для использования основных данных. Это приведет к созданию всех основных 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, которую учебник продолжает изменять если (![addPersistentStoreWithType координатор:конфигурация NSXMLStoreType:отсутствует URL-адрес:URL-адрес параметры:ошибка Нил:&об ошибке]) { к если (![координатор addPersistentStoreWithType:конфигурация NSSQLiteStoreType:отсутствует URL-адрес:URL-адрес параметры:ошибка Нил:&об ошибке]) {
В итоге я создал приложение Cocoa для Mac, как и предлагал seiterm. Однако созданная база данных не была в формате sqlite. Поэтому я создал приложение Cocoa Touch для iOS, использовал тот же код, и это было прекрасно.
Кроме того, если у вас возникли проблемы с поиском расположения базы данных, может быть полезно включить отладку SQL (описанную в одном из других учебных пособий). Это можно сделать, щелкнув схему вверху, затем изменить схему, запустить вкладку config - > Arguments и добавление
-com.apple.CoreData.SQLDebug 1
В качестве аргумента. Затем, когда вы запускаете приложение, в консоли должен быть вывод, что-то вроде:
CoreData: annotation: Connecting to sqlite database file at "/Users/doraemon/Library/....."
, который указывает на расположение базы данных.
Во-первых, вы используете учебник iOS для разработки приложения Mac OS X. Использование основных данных очень похоже между ними, но есть некоторые очевидные различия в том, как вы используете их в своем приложении (а именно, вы обычно используете
NSArrayController
для приложений mac, в то время как вы используетеNSFetchedResultsController
для приложений iOS).Шаблон для приложения командной строки не имеет флажка основные данные.
Для меня это преимущество, потому что основной код данных, включенный в шаблоны Xcode, Имо, не самый лучший способ чтобы использовать его в своем приложении.
Однако, как говорится, вы можете создать новое приложение Cocoa и проверить, чтобы включить основные данные. Этого, вероятно, достаточно для того, что вы хотите сделать, а именно поиграть с основными данными.
Или, вы можете просто скопировать / вставить код в приложение командной строки, чтобы настроить и использовать базовый стек данных ядра. Убедитесь, что вы
import
Основной модуль данных, и вы должны быть хорошо идти.