You need a -valueInCompaniesWithName:(NSString*)name method in your
container class that does a search and returns a single object that
matches. Here's what I did in Notae, for example:
- (id) valueInNotesWithName: (NSString*) theName
{
NSError *error;
NSFetchRequest* fr = [[[NSFetchRequest alloc] init] autorelease];
[fr setEntity:[NSEntityDescription entityForName:@"Note"
inManagedObjectContext:[self managedObjectContext]]];
[fr setPredicate:[NSPredicate predicateWithFormat:@"%@ == name",
theName]];
NSArray *result = [[self managedObjectContext]
executeFetchRequest:fr error:&error];
if (result && [result count] == 1) {
return [result objectAtIndex:0];
} else {
return nil;
}
}
Just change Note to Company and drop it in your container class and
you should be set.
Also, make sure the "name" attribute has the "pnam" code associated
with it in your SDEF (and your unique ID attribute should be 'ID
'). Veeery important for object lookups like this.
PS: Instead of checking to make sure the count of items is one, you
could just limit the NSFetchRequest to one item as well. I might
change that...
Adam Knight
"Every man is guilty of all the good he didn't do." -- Voltaire
On Jul 24, 2007, at 10:26 PM, Mike Zornek wrote:
I'm making some progress AppleScripting my Core Data app but have a
issue/question.
I can write a command like `set newCompany to make new company` and
the
newCompany reference in the result window looks like:
company "FADA519A-8140-495C-8613-1ADC6CF5BA54" of application
"Billable"
However, if I try to write `name of newCompany` it fails with
NSReceiverEvaluationScriptError: 4. According to the documentation
this
means "The object or objects specified by the direct parameter to a
command
could not be found." When this error happens it highlights 'name'
so does
this mean it can't find the name attribute on this object or is the
object
reference just bad somehow?
Some commands that are working fine for me:
get name of company 5
make company with properties {name:"WWDC"}
delete company named "WWDC"
The objectSpecifier on my company class looks like this. `uuid` is
a custom
attribute i create on awakeFromInsert.
- (NSScriptObjectSpecifier *)objectSpecifier
{
NSScriptClassDescription* appDesc = (NSScriptClassDescription*)
[NSApp
classDescription];
return [[[NSNameSpecifier alloc]
initWithContainerClassDescription:appDesc containerSpecifier:nil
key:@"scriptingCompanies" name:[self uuid]] autorelease];
}
Any thoughts or debugging suggestions? This (AppleScript itself and
implementing it) is still way over my head. :-(
~ Mike