On Aug 12, 2009, at 3:20 PM, Dave DeLong wrote:

Thanks for the info! I spent some time at NSCoder Night last night poking around with attempting to convert an NSPredicate into an NSCompoundPredicate using the TODParseKit and the BNF definition of NSPredicate grammar in the docs, then eventually gave up. =) (I figured there had to be an easier way, since this seems like a non- unreasonable thing to want to do)

Luckily, I was just pointed to the setObjectValue: approach on StackOverflow.com and have been trying to get that to work.

I've started building a test app to experiment with this. Here's what I've got:

1.  Create a new Document-based Cocoa App.
2.  Add an IBOutlet to MyDocument called "predicateEditor"
3. Drop an NSPredicateEditor into MyDocument.xib and connect it to File's Owner's predicateEditor outlet. 4. Add a "[predicateEditor addRow:self];" message in MyDocument's windowControllerDidLoadNib: method 5. In the dataOfType:... method, retrieve predicateEditor's objectValue, use NSKeyedArchiver to archive it, and return that as the data. 6. In the readData:ofType:... method, unarchive the data as an NSPredicate and use predicateEditor's setObjectValue: method to restore it.

If I run this, create a predicate, and save it, then it saves nicely to a file. If I then try to open that file, I can NSLog and see that the predicate is getting unarchived properly, but the predicateEditor doesn't load it. Is there anything I'm supposed to be doing besides setObjectValue:? I haven't modified the predicateEditor at all, other than to make the nesting "Compound".

In document based apps, readData:ofType: is called before the nib is loaded. So in your readData:ofType: method, the outlet to the NSPredicateEditor has not yet been populated, so that setObjectValue: goes to nil.

You can unarchive the predicate and store it in your MyDocument, and then push it to the NSPredicateEditor in windowControllerDidLoadNib:. Alternatively, if you're comfortable with bindings, you you can bind the NSPredicateEditor's object value to your document in IB, and then it will pick up the predicate when it's loaded.

Hope this helps,
-Peter
_______________________________________________

Cocoa-dev mailing list ([email protected])

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to