[英]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.