Just wanted to say: Problem solved!

My Info.plist was the problem.

I defined the NSSendFileTypes as NSStringPboardType and
public.plan-text. But I had to define the NSSendTypes. I also removed
the "Required Context".

        <key>NSServices</key>
        <array>
                <dict>
                        <key>NSMenuItem</key>
                        <dict>
                                <key>default</key>
                                <string>Handle string</string>
                        </dict>
                        <key>NSMessage</key>
                        <string>handleString</string>
                        <key>NSPortName</key>
                        <string>MyApp</string>
                        <key>NSSendFileTypes</key>
                        <array/>
                        <key>NSSendTypes</key>
                        <array>
                                <string>NSStringPboardType</string>
                                <string>public.plain-text</string>
                        </array>
                </dict>
        </array>

Now everything works!

Regards Sebastian.

On Fri, Jun 22, 2012 at 3:47 PM, Sebastian Pape
<sebastianderp...@gmail.com> wrote:
> Hi!
>
> I'm trying to provide a service using NSServices and the service
> always becomes disqualified, when trying to debug it. So I have no
> chance of ever letting my service fire.
>
> My service should be able to be fired on any string. I assigned a
> shortcut to my service in the system preferences (Command-Shift-T). I
> read the NSServices guide over and over and always get the same
> result. The service is being disqualified, because it's send or return
> type cannot be handled by the requestor.
>
> As I don't return anything that shouldn't be the problem. So it must
> have something to do with the send types....
>
> My Info.plist contains this:
>
>        <key>NSServices</key>
>        <array>
>                <dict>
>                        <key>NSMenuItem</key>
>                        <dict>
>                                <key>default</key>
>                                <string>Handle string</string>
>                        </dict>
>                        <key>NSMessage</key>
>                        <string>handleString</string>
>                        <key>NSPortName</key>
>                        <string>MyApp</string>
>                        <key>NSRequiredContext</key>
>                        <dict/>
>                        <key>NSSendFileTypes</key>
>                        <array>
>                                <string>NSStringPboardType</string>
>                                <string>public.plain-text</string>
>                        </array>
>                </dict>
>        </array>
>
>
> So, the service should work with any type of string. e.g. TextEdit or
> Stickies or even a selected string in Safari...right?
>
> In my app delegate I inserted a method to handle my service requests
> and also added the method signature to the .h file.
>
>
> MyAppDelegate.m
>
> - (void)handleString:(NSPasteboard *)pboard userData:(NSString
> *)userData error:(NSString **)error {
>    NSArray *classes = [NSArray arrayWithObject:[NSString class]];
>    NSDictionary *options = [NSDictionary dictionary];
>
>    if (![pboard canReadObjectForClasses:classes options:options]) {
>         return;
>    }
>    NSString *pboardString = [pboard stringForType:NSPasteboardTypeString];
>    NSLog("NSServices received: %@", pboardString);
> }
>
> So, first the service should just log my string to stdout.
>
> If I try to start debugging, the service is always recognized:
>
>
> user$ /System/Library/CoreServices/pbs -dump_pboard
>
> […]
>               {
>            NSBundleIdentifier = "com.myname.myapp";
>            NSBundlePath = "/Applications/MyApp.app";
>            NSKeyEquivalent =             {
>            };
>            NSMenuItem =             {
>                default = "Handle string";
>            };
>            NSMessage = handleString;
>            NSPortName = MyApp;
>            NSRequiredContext =             {
>            };
>            NSSendFileTypes =             (
>                NSStringPboardType,
>                "public.plain-text"
>            );
>        },
>
> […]
>
> If trying to use the service with Stickies and debugging it the
> service is disqualified immediately when using the shortcut
> Shift-command-T
>
>
>
> user$ /Applications/Stickies.app/Contents/MacOS/Stickies
> -NSDebugServices com.myname.myapp
> 2012-06-22 14:38:33.956 Stickies[12510:903] NSDebugServices=com.myname.myapp
> Handle string (com.myname.myapp) is enabled in the services menu and
> enabled in the context menu, by the standard Services policy.
> Handle string (com.myname.myapp) has a custom key equivalent:
> <NSKeyboardShortcut: 0x10052d880 (⇧⌘T)>.
> Handle string (com.myname.myapp) is enabled in the services menu and
> enabled in the context menu, by the standard Services policy.
> Handle string (com.myname.myapp) has a custom key equivalent:
> <NSKeyboardShortcut: 0x1005deac0 (⇧⌘T)>.
> Handle string (com.myname.myapp) is disqualified because its send
> and/or return types cannot be handled by the requestor <NSTextView:
> 0x1005842b0>
>    Frame = {{0.00, 0.00}, {290.00, 178.00}}, Bounds = {{0.00, 0.00},
> {290.00, 178.00}}
>    Horizontally resizable: NO, Vertically resizable: YES
>    MinSize = {290.00, 178.00}, MaxSize = {994.00, 10000000.00}
> .
>
> I don't understand why the "NSTextView" can't handle the send type?!
> What does that mean for me practically? Do I need to handle the
> NSTextView in my method?
>
> Can anybody help me with that?
>
> Thank you
> Sebastian!

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to