2009-12-29 3 views
0

J'ai une petite application de données de base. J'ai une sous-classe d'un NSObjectController agissant comme la liaison entre la vue et le modèle et un NSTextField sur la vue pour l'utilisateur à taper.NSObjectController - setAutomaticallyPreparesContent:

Lorsque la fenêtre s'ouvre, le champ de texte est modifiable car les liaisons sont définies sur mon NSObjectController sous-classé, la clé du contrôleur sur «content» et le chemin de clé du modèle sur un attribut de mon entité.

Si je tape du texte, enregistrez le fichier et le rouvrez, le texte de NSTextField n'est pas présent. Pour tester, j'ai un bouton connecté au sélecteur add: du contrôleur et lorsque vous appuyez sur le bouton tout fonctionne bien - vous pouvez entrer du texte dans un NSTextField, vous pouvez enregistrer le document, vous pouvez l'ouvrir à nouveau.

Comment préparer l'objet lorsque la plume se charge?

Dans ma méthode init dans ma sous-classe de la NSObjectController je:

[self setAutomaticallyPreparesContent:YES]; 

puis-je en MyDocument: windowControllerDidLoadNib (oc est le IBOutlet à l'objectcontroller sous-classé dans IB):

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

mais cela n'a pas fonctionné. J'ai besoin de créer le contenu pour que l'utilisateur puisse commencer à taper.

Merci

+0

OK, je lis et En lecture, je ne l'ai toujours pas mais je pense que je dois créer une nouvelle instance de mon NSObjectController et l'ajouter à mon managedObjectContext. Pour un document existant, cependant, je suppose que MyDocument créera le contrôleur d'objet à partir de NSPersistantDocument. Suis-je sur la bonne voie? – Mark

Répondre

0

OK, voici ma contribution. Je suis heureux de pouvoir répondre à quelque chose! Je l'ai trouvé dans le "Tutoriel NSPersistentDocument Core Data" dans la documentation. Rappelez-vous, mon problème était lorsque le document est créé que je veux créer un NSManagedObject. De cette façon, l'utilisateur n'a pas besoin de cliquer sur le bouton "Ajouter". Je ne veux pas que le document soit sale (jusqu'à ce que l'utilisateur tape quelque chose) et je ne veux pas remplacer le contenu si j'ouvre un fichier sauvegardé. Cela ne doit se produire que lorsqu'un nouveau document est créé.

NSDocument fournit une méthode:

initWithType:error: 

pour ce faire.

1) saisir le managedObjectContext,

2) désactiver défaire pour le moment. Cela empêche le document d'être sale et empêche l'utilisateur d'annuler la création et l'insertion de l'entité.

3) utilisent insertNewObejctForEntityForName: inManagedObjectContext

4) installer les modifications

5) rallume undo

Voici le code:

- (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; 
}