Переопределить managedObjectModel в UIManagedDocument

Я работаю с новыми функциями UIDocument в iOS 5.0. У меня есть существующее приложение, которое использует несколько разных моделей данных (файлы momd).Согласно документации для UIManagedDocument, вы можете переопределить - (NSManagedObjectModel *) managedObjectModel для загрузки определенной модели данных (по умолчанию загружаются все найденные модели данных, объединенные вместе). Обе модели данных имеют перекрывающиеся названия моделей с разными схемами, поэтому в моем случае это нежелательно.

Соответствующий документ Apple

Итак, проблема, с которой я столкнулся в простом примере, заключается в том, что я могу переопределить функцию, но не могу присвоить ей результат. Оба они являются частными, поэтому подкласс не может получить доступ к _managedObjectModel; и он доступен только для чтения, поэтому self.managedObjectModel не может быть назначен ..

Я искал пример UIManagedDocument, который действительно переопределяет managedObjectModel, но Apple, похоже, его не предоставляет.

Возможно, я смогу определить новую переменную экземпляра _myManagedObjectModel и назначить ее. Затем верните это на аксессуар, который я отменяю. Меня беспокоит то, что может нарушиться некоторая внутренняя реализация UIManagedDocument, которая не использует аксессор managedObjectModel в предпочтении для _managedObjectModel (что часто встречается в реализациях Apples ...)

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

//
//  DTNoteDocument.m
//  document-test
//
//

#import "DTNoteDocument.h"

@implementation DTNoteDocument

NSString * const kDataManagerModelName = @"Note";

-(NSManagedObjectModel*)managedObjectModel {

    if (_managedObjectModel != nil)
        return _managedObjectModel;

    NSBundle *bundle = [NSBundle mainBundle];
    NSString *modelPath = [bundle pathForResource:kDataManagerModelName ofType:@"momd"];
    _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:[NSURL fileURLWithPath:modelPath]]; // compile error on this line, private variable cannot be assigned

    return _managedObjectModel;
}
@end

Заголовок:

#import 

@interface DTNoteDocument : UIManagedDocument

@end

5
задан Cœur 5 April 2019 в 03:17
поделиться