簡體   English   中英

在Mac OS X 10.8 Mountain Lion上未調用該方法

[英]Method does not invoked on Mac OS X 10.8 Mountain Lion

我正在嘗試創建可在Mac OS X 10.8上使用的小型應用程序。

在Mac OS X Mavericks和Mac OS X Yosemite上,我的應用程序運行良好,但在Mac OS X 10.8上,未調用應用程序的主要方法。 確切地說,該方法似乎是瞬時調用的,但是在被警報聲殺死后不久。 我知道Mac OS X 10.8比之后的OS嚴格一些。 但是我認為我的代碼出了點問題,我找不到。

我的主要方法是可以的,因為如果直接調用它,它將正常工作而不會出現任何問題。 但是,如果我在通知選擇器的方法中調用它,則會出現問題。

這是我的代碼。 我感謝任何建議,謝謝。

- (IBAction)startButton:(id)sender {
    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
    if ( [[defaults objectForKey:@"aBookMark"] length] == 0 ) {
        [self getAudioCDPath];
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(runEncodeAsyncWithNotify:)
                                                     name:NSWindowDidEndSheetNotification
                                                   object:self.window];
    } else {
        [self runEncodeAsync];
    }
}

/* This method have problem */
-(void)runEncodeAsyncWithNotify:(NSNotification *)notification {

    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:NSWindowDidEndSheetNotification
                                                  object:self.window];
    encodingFlag = YES;
    [_start setEnabled: NO];
    [_stop  setEnabled: YES];

    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    [queue addOperationWithBlock:^{
        [self encodeWithLAME];
    }];
}

/* This method does not have any problem */
-(void)runEncodeAsync {

    encodingFlag = YES;
    [_start setEnabled: NO];
    [_stop  setEnabled: YES];

    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    [queue addOperationWithBlock:^{
        [self encodeWithLAME];
    }];
}

我的錯誤是使用NSWindowDidEndSheetNotification作為工作表關閉通知。 [self getAudioCDPath]是一種呈現表單OpenPanel的方法,它本身具有completeHandler completionHandler:塊。 因為我想做的只是調用[self runEncodeAsync] ,所以我應該將它寫在completionHandler:塊中。 無需使用NSWindowDidEndSheetNotification

因此,這是getAudioCDPath的修改后的代碼。 抱歉,我沒有在問題中顯示它。

[aPanel beginSheetModalForWindow:self.window completionHandler:^(NSInteger result) {

    if (result == NSFileHandlingPanelOKButton) {

        NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];

        NSURL *aDirURL = [[aPanel URLs] objectAtIndex:0];
        NSData *bookmark = nil;
        NSError *error = nil;
        bookmark = [aDirURL bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope
                     includingResourceValuesForKeys:nil
                                      relativeToURL:nil
                                              error:&error];
        if (error) {
            NSLog(@"Error creating bookmark for URL (%@): %@", aDirURL, error);
        }

        [defaults setObject:bookmark forKey:@"aBookMark"];

        [self runEncodeAsync]; // I added this to invoke main method!!
    }
}];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM