【问题标题】:How can I troubleshoot my custom URL scheme?如何对我的自定义 URL 方案进行故障排除?
【发布时间】:2008-12-03 16:04:02
【问题描述】:

here 所述,我设置了一个简单的事件处理程序,但似乎没有调用选择器。我将代码放在我的 AppDelegate 类中,并将委托连接到 IB 中。尝试在我希望被调用的选择器中放入一些 NSLog() 和断点,但没有一个被命中。 URL 方案在启动我的应用程序时起作用,但在那之后它什么也不做。谁能建议如何解决这个问题?谢谢!

【问题讨论】:

    标签: objective-c cocoa appleevents


    【解决方案1】:

    好吧,我不禁注意到你的 -init 方法被错误地声明了。如果应该有返回类型id 并在末尾有一个return self;

    - (id)init
    {
        self = [super init];
        if (self) {
            [[NSAppleEventManager sharedAppleEventManager] setEventHandler:self andSelector:@selector(getUrl:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL];
        }
        return self;
    }
    

    通过这些修复,我能够将这两个例程粘贴到一个测试 AppController 类中,并让它打印出我在 Safari 中键入的 URL(使用自定义方案)。我会在该 -init 方法上放置一个断点并逐步执行它以绝对确保 -setEventHandler: 方法被调用。

    【讨论】:

      【解决方案2】:

      最大的问题是:你在哪里调用 NSAppleEventManager 的 -setEventHandler:...?如果要捕获启动应用的 URL,则需要在应用完成启动之前调用它。如果您的应用程序委托是在您的 MainMenu.nib 中创建的,那么它的 -init 或 -awakeFromNib 方法将起作用,但例如 -applicationDidFinishLaunching: 将不起作用。

      另外,请确保您提供给 -setEventHandler: 的选择器与您的方法名称完全相同,特别注意大小写和正确的冒号数。

      显然,如果您发布了您的应用代理的相关代码,那将会很有帮助。

      【讨论】:

        【解决方案3】:

        感谢您的建议。我仔细检查了那些东西。我确定这是一些新手错误,但我会感谢任何查看代码的人。 (URL 位存储在 info.plist 中。)现在我只是在尝试对 URL 进行任何操作之前确认它是否正常工作。

        - (void)init{
            self = [super init];
            if(self){
                [[NSAppleEventManager sharedAppleEventManager] setEventHandler:self andSelector:@selector(getUrl:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL];
            }
        }
        
        - (void)getUrl:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent
        {    
            NSString *url = [[event paramDescriptorForKeyword:keyDirectObject] stringValue];
            NSLog(url);
            // now you can create an NSURL and grab the necessary parts
        }
        

        【讨论】:

        • 我应该补充一点,我尝试将方法调用移动到 -awakeFromNib 但没有任何乐趣。
        【解决方案4】:

        新手错误 #2:没有在 IB 中设置我的应用程序委托的类。修复这个和上面的 init 方法让我走了。呜呜呜……

        【讨论】:

          猜你喜欢
          • 2023-04-07
          • 1970-01-01
          • 2011-02-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多