2012-10-18 47 views
0

調用UIGetScreenImage()的時候,當我的應用程序中輸入的背景下,出現如下錯誤信息:得到錯誤的背景

012-10-18 14:38:05.964 SoundRecorder[693:14603] *** Terminating app due to uncaught 
exception 'NSGenericException', reason: 'Cannot call UICreateScreenImage() while app 
is in the background.' 

這是我的代碼:

- (void) getImage 
{ 
    CGImageRef screen = UIGetScreenImage(); 
    UIImage* image = [UIImage imageWithCGImage:screen]; 
    CGImageRelease(screen); 
    UIImageWriteToSavedPhotosAlbum(image, self, nil, nil); 
    NSLog(@"1"); 
    [NSThread sleepForTimeInterval:0.5]; 
} 

- (void) applicationDidEnterBackground: (UIApplication*) application 
{ 
    UIApplication *app = [UIApplication sharedApplication]; 
    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ 
     [app endBackgroundTask:bgTask]; 
     bgTask = UIBackgroundTaskInvalid; 
    }]; 
    dispatch_async(
     dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     while(1){ 
      [self getImage]; 
      if(breakpoints != 1) 
       break; 
     } 
     NSLog(@"run at backgroud!"); 
     [app endBackgroundTask:bgTask]; 
     bgTask = UIBackgroundTaskInvalid; 
    }); 
} 
+0

'[self getImage]'裏面有什麼? – zoul

+0

CGImageRef UIGetScreenImage(void); (void)getIamge {CGImageRef screen = UIGetScreenImage(); UIImage * image = [UIImage imageWithCGImage:screen]; CGImageRelease(screen); UIImageWriteToSavedPhotosAlbum(image,self,nil,nil); NSLog(@「1」); [NSThread sleepForTimeInterval:0.5]; } –

+0

最好將代碼添加到問題中,這很難在評論中閱讀。我已經編輯了該問題併爲您添加了缺少的代碼,現在可以刪除該評論。 – zoul

回答

2

好了,根據錯誤信息當您的應用在後臺時無法撥打UIGetScreenImage()和相關功能。這很有道理,這將是一個巨大的安全漏洞。

0

您不應該使用dispatch_async,而必須在後臺線程中調用此函數。

在主/ UI線程內調用dispatch_async可能會導致該函數被多次調用(因爲async會立即返回),即使在最後一次完成之前也會壓倒隊列。

我可以證實它的工作原理,如果你在UI以外的其他線程中調用它。