Domanda

posso creare un NSPredicate facilmente utilizzando un NSPredicateEditor (una sottoclasse di NSRuleEditor). Quello che mi piacerebbe sapere è questo:

Come posso prendere un NSPredicate esistente (quello creato dal curatore) e ricaricarla in l'editor in modo che possa alterarlo?

EDIT: Ho provato @ il suggerimento di Giovanni di utilizzare setObjectValue :, ma che non ha funzionato del tutto. Mi spiego il mio set up un po 'di più:

Ho un cacao app documento-based, e la finestra del documento ha solo un NSPredicateEditor su di esso. Nel metodo dataOfType:error:, ho:

NSPredicate * pred = [predicateEditor objectValue];
NSData * predicateData = [NSKeyedArchiver archivedDataWithRootObject:pred];
return predicateData;

Nel metodo readFromData:ofType:error:, ho:

NSPredicate * pred = [NSKeyedUnarchiver unarchiveObjectWithData:data];
[predicateEditor setObjectValue:pred];
return (pred != nil);

Ho verificato che il predicato è sempre correttamente archiviato e non archiviato, ma dopo l'apertura di un predicato salvato, il predicato non viene caricato nella predicateEditor. (Sì, predicateEditor è collegato come un IBOutlet)

È stato utile?

Soluzione

Impostare la proprietà objectValue del NSPredicateEditor al predicato in questione.

Il documentazione ha questa descrizione del processo di caricamento; Se tutto questo vi sembra come potrebbe causare un problema con la configurazione?

  

In primo luogo, un'istanza di   NSPredicateEditor è creato, e un po '   Modelli di riga sono impostati su di esso: o   attraverso un file pennino o   a livello di codice. La prima cosa   editor di predicato non è chiedere a ciascuno di   i modelli per le loro opinioni, utilizzando   templateViews.

     

Dopo aver impostato l'editor predicato,   in genere si invia un   setObjectValue: messaggio a ripristinare un   predicato salvato. NSPredicateEditor   deve determinare quale della sua   modelli dovrebbero visualizzare ogni   predicato nella albero predicato. esso   fa questo inviando ogni sua fila   Modelli un matchForPredicate: messaggio   e scegliere quello che restituisce il   più alto valore.

     

Dopo aver trovato la migliore corrispondenza per un   predicato, copie NSPredicateEditor   tale modello per ottenere i pareri fresche,   li inserisce nella riga corretta, e   quindi imposta il predicato sulla   modello utilizzando setPredicate :. Entro   tale metodo, la   oggetto NSPredicateEditorRowTemplate   deve impostare i valori le sue opinioni to   rappresentare quel predicato.

     

NSPredicateEditorRowTemplate successiva chiede   il modello per la “visualizzabile   sub-predicati”del predicato da   l'invio di un   displayableSubpredicatesOfPredicate:   Messaggio. Se un modello rappresenta una   predicato nella sua totalità, o se la   predicato non ha subpredicates, si può   restituire nil per questo. In caso contrario,   dovrebbe restituire un elenco dei predicati a   essere trasformato sottofila di tale   fila del modello. L'intero processo   ripete per ogni sotto-predicato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top