Hi Chris,
This is a complete shot in the dark:
what happens if instead of referencing 'toObject:patchController'
you reference: 'toObject:YourQCView'

I've been troubled by some code that tries to set a value [an image] to a published image port - when it address the QCcontroller it fails - but when I address the QCview - it works.

[myQCController setValue: image forInputKey: @"patch.myQCImage.value"]; -- fails
[myQCController setValue: image forInputKey: @"myQCImage"]; -- fails

[myQCView setValue: image forInputKey: @"myQCImage"]; -- works

I note that myQCView is not an outlet in my application controller implementation (myController) but myQCController is:

IBOutlet id myQCController;

I can send you my demo code if you need it: it uses webkit to load a URL, get an image of the webpage, and sends the NSimage to a NSImageView then sends the image into a QC composition.

Regards, Ian



*******************************
Ian Grant
Senior Lecturer in Digital Art
Faculty of the Arts
Thames Valley University
Ealing, UK
W5 5DX
<[EMAIL PROTECTED]>
*******************************



On 16 Jan 2008, at 19:11, Chris Adamson wrote:

I'm working through an experiment, and I think I'm close, but I'm not quite lining things up. I've Googled old list entries and haven't found an answer yet.

In a nutshell, I want to bind the return value of a method in my main window's controller to an input on Quartz Composer composition. Ultimately, the demo will use QC to render the audio level of a QuickTime movie, which will satisfy my curiosity about using QC as a nifty way to render application data.

The trick is getting the bindings worked out. I've been working from the Quartz Composer Programming Guide and the Cocoa Bindings Programming Topics docs, as well as various tech notes and blogs I've found by way of Google.

The first thing I wanted to convince myself of is that it would work to bind a method's return value to a GUI component (this is implicit in KVC looking for methods or variables that match the bound key; I just wanted to see it for myself). I created an Object Controller, connected it to MyController in IB, and used IB to bind an NSTextField to Object Controller.selection.movieLevel. Works fine, returns my current dummy value.

So next, I started working on the QC side of the equation. I added a QCView and a QCPatchController, loaded the the composition into the controller, and connected the view to the controller with IB. Simulating this from IB worked: I saw my composition in the window.

Now, here's what I think is the hard part: binding the method in MyController to the input in the QC composition. It occurs to me that IB doesn't know about my controller's method name, or about the inputs to the composition. If I understand the situation, this means I need to establish the binding programmatically.

To do that, I add variables for the NSObjectController (still connected to MyController from before), and the QCPatchController to MyController.h:

        IBOutlet id patchController;
        IBOutlet NSObjectController *objController;

Note that I used a plain id because QCPatchController doesn't have a public header. OK, so I connected MyController to these respective objects, so now I think I have what I need for MyController to programmatically bind its own movieLevel method (by way of the objController) to the input on the QC composition. So I try the following in awakeFromNib:

- (void)awakeFromNib {
    NSLog(@"awakeFromNib!");
    [objController bind:@"selection.movieLevel"
        toObject:patchController
        withKeyPath:@"patch.MyText.value"
        options:nil];
    NSLog (@"Called bind");
}

And... it doesn't work. The runtime tells me that something here isn't KVC compliant:

2008-01-16 14:06:19.797 QCLevelMeterExperiment1[2244:10b] awakeFromNib! 2008-01-16 14:06:19.819 QCLevelMeterExperiment1[2244:10b] An uncaught exception was raised 2008-01-16 14:06:19.821 QCLevelMeterExperiment1[2244:10b] [<NSObjectController 0x18dd60> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key selection.movieLevel.


So, that's the situation. I can't tell if I'm on the right track and just haven't provided appropriate paths for the binding, or if I'm really going off in the wrong direction.

Thanks in advance for any advice. If it turns out that someone's already written this up or blogged it, then apologies for not managing to find it.

--Chris

_______________________________________________
Do not post admin requests to the list. They will be ignored.
Quartzcomposer-dev mailing list ([email protected] )
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/quartzcomposer-dev/ian.grant%40mac.com

This email sent to [EMAIL PROTECTED]

_______________________________________________
Do not post admin requests to the list. They will be ignored.
Quartzcomposer-dev mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/quartzcomposer-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]

Reply via email to