Действительно ли базовые Данные полезны для данных только для чтения также?

Производительность должна быть идентичной, но я предложил бы использовать версию соединения из-за улучшенной ясности когда дело доходит до внешних объединений.

Также неумышленные декартовы произведения могут избегаться использования версия соединения.

эффект трети А является более легким для чтения SQL с более простым ГДЕ-УСЛОВИЕМ.

12
задан Christian 28 October 2009 в 17:00
поделиться

5 ответов

If you will be displaying your read-only data in a table view, there can be significant advantages to using Core Data over SQLite simply due to NSFetchedResultsController. This convenience class makes it extremely easy to display database elements in a table view, and it can handle batched fetching for you. The batched fetching lets you load only the information you need on screen right then, dramatically improving loading time and memory usage for all but the smallest data sets.

I use Core Data for read-only information that I ship in my application's bundle for this reason, along with the fact that I can share a data model with the writable database stored in the user's application data. My recommendation is to go with Core Data unless you absolutely need to target iPhone OS 2.x devices.

13
ответ дан 2 December 2019 в 18:54
поделиться

Вы определенно можете отправить предварительно заполненное хранилище основных данных в свое приложение, так же, как вы могли бы предварительно заполнить базу данных SQLite или большой список со всеми своими данные (хотя это звучит как плохой вариант для этого случая) или что-то еще.

Core Data хороши, потому что это все нативные Cocoa, они обрабатывают всю загрузку из БД в собственные объекты, они были безжалостно оптимизированы, и поэтому на. Но там также есть много кода, чтобы делать вещи, которые вам не нужны: обработка ревизий, сохранение изменений, поддержка отмены и повтора и т. Д. Так что на самом деле нет явно правильного ответа, так или иначе.

A многое будет зависеть от вашего уровня комфорта как с Core Data, так и с альтернативами. Довольны ли вы использованием SQLite API (или одной из многих оболочек какао ) для получения ваших данных? Если да, то это может быть проще. Если использование Core Data для ORM будет для вас большой победой, сделайте это. С другой стороны, сложные запросы с Core Data используют API-интерфейсы предикатов, которые могут быть более сложными, чем использование простого SQL с SQLite. Такие вещи.

2
ответ дан 2 December 2019 в 18:54
поделиться

Core Data использует SQLite (среди других вариантов), поэтому ваш вопрос несколько ошибочен.

-8
ответ дан 2 December 2019 в 18:54
поделиться

В зависимости от того, насколько они реляционные, вы можете быть Лучше читать данные только для чтения из списка. Plist легко загружать / сохранять (они превращаются в NSDictionaries) и, вероятно, их легче редактировать

2
ответ дан 2 December 2019 в 18:54
поделиться

Вот простой способ предварительно загрузить хранилище Core Data с помощью списков.

Составьте список свойств, содержащий массив словарей. Сделайте ключи каждого словаря соответствующими ключам вашего управляемого объекта.

alt text

Затем вызовите этот метод при первом запуске приложения:

- (void)loadDataFromPropertyList {
    NSString *path = [[NSBundle mainBundle] pathForResource:@"someFile" ofType:@"plist"];
    NSArray *items = [NSArray arrayWithContentsOfFile:path];

    NSManagedObjectContext *ctx = self.managedObjectContext;

    for (NSDictionary *dict in items) {
        NSManagedObject *m = [NSEntityDescription insertNewObjectForEntityForName:@"TheNameOfYourEntity" inManagedObjectContext:ctx];
        [m setValuesForKeysWithDictionary:dict];
    }

    NSError *err = nil;
    [ctx save:&err];

    if (err != nil) {
        NSLog(@"error saving managed object context: %@", err);
    }
}

Вызовите loadDataFromPropertyList при первом запуске приложения, включив следующий код в реализацию приложения : (UIApplication *) application didFinishLaunchingWithOptions: (NSDictionary *) launchOptions :

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];  
if (![defaults objectForKey:@"firstRun"])
{
    [defaults setObject:[NSDate date] forKey:@"firstRun"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    [self loadDataFromPropertyList];
}
10
ответ дан 2 December 2019 в 18:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: