2009-12-29 1 views
0

У меня есть небольшое приложение данных с основными данными. У меня есть подкласс NSObjectController, выступающий в качестве связывания между представлением и моделью и NSTextField в представлении для ввода пользователем.NSObjectController - setAutomaticallyPreparesContent:

Когда окно открывается, текстовое поле доступно для редактирования, потому что у меня есть привязки, установленные для моего подкласса NSObjectController, ключ контроллера для «контента» и путь ключа модели к атрибуту моего объекта.

Если я напечатаю какой-нибудь текст, сохраните файл и откройте его, то текст в NSTextField там отсутствует.

Для тестирования у меня есть кнопка, связанная с добавлением: селектором контроллера, и когда вы нажимаете кнопку, все работает нормально - вы можете вводить текст в NSTextField, вы можете сохранить документ, вы можете открыть его снова.

Как подготовить объект при загрузке ножа?

В моем методе инициализации в моем подкласса NSObjectController у меня есть:

[self setAutomaticallyPreparesContent:YES]; 

, а затем я в MyDocument: windowControllerDidLoadNib (ос находится в IBOutlet на подклассы objectcontroller в IB):

[oc fetchWithRequest:nil merge:NO error:&error]; 

но это не сработало. Мне нужно создать контент, чтобы пользователь мог начать печатать.

Thanks

+0

ОК, я читаю и чтение все еще не имеет его, но я думаю, что мне нужно создать новый экземпляр моего NSObjectController, а затем добавить его в мой managedObjectContext. Однако для существующего документа я предполагаю, что MyDocument создаст контроллер объекта из документа NSPersistantDocument. Я на правильном пути? – Mark

ответ

0

ОК, вот мой вклад. Я рад, что смогу ответить на что-то! Я нашел это в «Руководстве по основным данным NSPsistentDocument» в документации.

Помните, что моя проблема заключалась в создании документа. Я хочу создать объект NSManagedObject. Таким образом, пользователю не нужно нажать кнопку «Добавить». Я не хочу, чтобы документ был грязным (пока пользователь не набирает что-то), и я не хочу заменять содержимое, если открываю сохраненный файл. Это должно произойти только при создании нового документа.

NSDocument обеспечивает способ:

initWithType:error: 

для достижения этой цели.

1) захватить managedObjectContext,

2) отключить отмены на данный момент. Это предотвращает загрязнение документа и не позволяет пользователю отменить создание и вставку Entity.

3) использовать insertNewObejctForEntityForName: inManagedObjectContext

4) установить изменения

5) повернуть обратно отменить

Вот код:

- (id)initWithType:(NSString *)typeName error:(NSError **)outError 
{ 
    self = [super initWithType:typeName error:outError]; 
    if (self != nil) { 
     NSManagedObjectContext *managedObjectContext = [self managedObjectContext]; 

     [[managedObjectContext undoManager] disableUndoRegistration]; 

     self.myManagedObject = [NSEntityDescription insertNewObjectForEntityForName:@"myEntityName" 
                 inManagedObjectContext:managedObjectContext]; 

     [managedObjectContext processPendingChanges]; 

     [[managedObjectContext undoManager] enableUndoRegistration]; 
     NSLog(@"initWithType"); 
    } 
    return self; 
}