Использование библиотеки magicrecords в пользовательском статическом фреймворке iOS

Я реализовал пользовательскую статическую структуру для iOS. Все работает хорошо, но теперь я понял, что мне нужно хранить информацию через coredata во фреймворке. Я использовал библиотеку magicrecord в своих предыдущих проектах, и мне было интересно, есть ли у кого-нибудь опыт интеграции magicrecord в вашу собственную статическую структуру.

Когда я когда-либо вызываю метод setupcorestack внутри кода моего фреймворка, ничего не происходит.


person iamraymondchen    schedule 02.04.2013    source источник
comment
Вы предоставляете необходимые заголовки своей пользовательской библиотеке/фреймворку. Затем приложение, использующее вашу библиотеку/фреймворк, должно связать все необходимые библиотеки/объектные файлы/фреймворки.   -  person Till    schedule 02.04.2013


Ответы (2)


Вот как мы это сделали:

// 1: Note that all setup is done within the AppDelegate of the project (not the framework)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    // 2: Locate your framework bundle
    NSString *mainBundlePath = [[NSBundle mainBundle] resourcePath];
    NSString *frameworkBundlePath = [mainBundlePath stringByAppendingPathComponent:@"Your-Framework-Bundle-Name.bundle"];
    NSBundle *frameworkBundle = [NSBundle bundleWithPath:frameworkBundlePath];

    // 3: Create an NSManagedObject Model by merging all models from the project and your framework. This simplifies saving as you can use a single persistent store coordinator to save a single managed object model.
    NSArray *bundles = [NSArray arrayWithObjects:[NSBundle mainBundle], frameworkBundle, nil];
    NSManagedObjectModel *models = [NSManagedObjectModel mergedModelFromBundles:bundles];

    [MagicalRecord setShouldAutoCreateManagedObjectModel:NO];
    [NSManagedObjectModel setDefaultManagedObjectModel:models];
    [MagicalRecord setupCoreDataStackWithStoreNamed:@"Your-Store-Name.sqlite"];

    // Project specific setup goes here...

    return YES;
    }

Примечание: представляется возможным иметь несколько постоянных хранилищ и несколько баз данных, но мы еще не пробовали это делать или в этом не было необходимости. Однако, если вам нужно несколько постоянных хранилищ в вашем случае, вы также можете обратиться к этому другому сообщению SO:

Несколько баз данных с MagicalRecord или только часть синхронизации базы данных в iCloud

person JRG-Developer    schedule 05.04.2013
comment
Привет, приведенное выше решение не работает в рамках структуры какао-прикосновения. - person KrishnaCA; 21.06.2016
comment
Этому ответу почти 3 года ... что-то могло измениться в текущей версии вещей ... Если вы найдете более новое / лучшее решение, не стесняйтесь публиковать его как новый ответ. - person JRG-Developer; 21.06.2016
comment
Спасибо за ответ - person KrishnaCA; 21.06.2016
comment
4 года, но все еще точно! Чего мне не хватало, так это: [MagicalRecord setShouldAutoCreateManagedObjectModel:NO]; Спасибо!! - person Kevin Delord; 03.01.2018

Я делаю это так:

NSManagedObjectModel *model = [NSManagedObjectModel MR_newModelNamed:@"MyModel.momd" inBundleNamed:@"myOtherResource.bundle"];
[NSManagedObjectModel  MR_setDefaultManagedObjectModel:model];

//... continue to setup CoreDataStack after here
person bandejapaisa    schedule 17.10.2013