سؤال

وأقوم بإعداد معالج حدث بسيط كما ذكر <لأ href = "https://stackoverflow.com/questions/49510/how-do-you-set-your-cocoa-application-as-the-default-web -browser "> هنا ، ولكن يبدو أن محدد لا يسمى. أنا وضعت رمز في صفي AppDelegate السلكية ويصل المفوض في IB. حاولت وضع بعض NSLog () ق ونقاط التوقف في محدد أتوقع أن يسمى، ولكن هو ضرب أي من ذلك. مخطط URL يعمل بقدر ما تطلق التطبيق الخاص بي، لكنها لا تفعل أي شيء بعد ذلك. يمكن لأي شخص تقديم المشورة كيفية استكشاف هذا؟ شكرا!

هل كانت مفيدة؟

المحلول

حسنا، لا يسعني إلا أن تلاحظ أنك وسوء أعلن طريقة -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 الاختبار، ويكون ذلك طباعة عناوين المواقع (مع نظام مخصص) أنني كتبته في سفاري. كنت وضعت نقطة على هذه الطريقة -init وخطوة من خلال ذلك إلى جعل متأكدا تماما من أن -setEventHandler: هو الحصول على استدعاء أسلوب

نصائح أخرى

والسؤال الكبير هو: إلى أين أنت تدعو -setEventHandler NSAppleEventManager ل: ...؟ تحتاج إلى استدعاء هذا من قبل التطبيق انتهاء تطلق إذا كنت تريد للقبض على URL التي بدأت التطبيق الخاص بك. إذا تم إنشاء تفويض تطبيقك في MainMenu.nib الخاص بك، ثم إما في -init أو أساليب -awakeFromNib ستعمل، ولكن، على سبيل المثال، -applicationDidFinishLaunching: لن تفعل ذلك.

وأيضا، تأكد من أن إختيار التي تقدمها -setEventHandler: هو بالضبط نفس اسم الأسلوب الخاص بك، مع إيلاء اهتمام خاص لرأس المال وعدد مناسب من كولون

من الواضح، إذا قمت بنشرها كود ذات الصلة المتعلق بتفويض تطبيقك، فإنه سيكون من المفيد جدا.

وشكرا لهذه الاقتراحات. I المزدوج فحص تلك الأشياء. أنا متأكد من انها بعض الخطأ مبتدئ، ولكنني سأكون ممتنا لكل من يبحث في التعليمات البرمجية. (يتم تخزين بت 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
}

وحاليا الخطأ # 2: لم تعيين فئة من بلدي مندوب التطبيق في IB. إصلاح هذه وطريقة الحرف الأول كما حصلت فوقي الذهاب. Grrr ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top