2012-08-02 60 views
0

這隻有當上述項目已在此應用程序的運行產生反應。如果先前創建了條目,它會很好地獲取圖像。後臺線程返回的UIImage的結果作爲零

此代碼的工作,而無需使用後臺線程精細,所以它使我相信這是問題的一部分。下面的代碼我有:

NSMutableDictionary *thumbnails = [[NSMutableDictionary alloc] init]; 

      dispatch_queue_t thumbnailSetupQueue = dispatch_queue_create("com.App.SetupTimelineThumbnails", NULL); 
      dispatch_async(cellSetupQueue, ^{ 

       NSManagedObjectContext *newMoc = [[NSManagedObjectContext alloc] init]; 
       NSPersistentStoreCoordinator *coordinator = [NSManagedObjectContext contextForCurrentThread].persistentStoreCoordinator; 
       [newMoc setPersistentStoreCoordinator:coordinator]; 

       NSNotificationCenter *notify = [NSNotificationCenter defaultCenter]; 
       [notify addObserver:self 
          selector:@selector(mergeChanges:) 
           name:NSManagedObjectContextDidSaveNotification 
          object:newMoc]; 

       Media *media = [localEntry.media anyObject]; 

       UIImage *image = [media getThumbnail]; 

       NSLog(@"image: %@", image); 

       [[NSNotificationCenter defaultCenter] removeObserver:self]; 
      }); 

      dispatch_release(cellSetupQueue); 

然後

-(UIImage *)getThumbnail { 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *fullPath = [documentsDirectory stringByAppendingPathComponent: 
          [NSString stringWithFormat:@"%@-%@.jpg", 
          self.mediaID, 
          THUMBNAIL_FILENAME]]; 

    UIImage *thumbnail = [UIImage imageWithContentsOfFile:fullPath]; 

    NSLog(@"correct size thumbnail: %@", correctSizeThumbnail); 

    return correctSizeThumbnail; 

} 

的的NSLog在getThumbnailWithSave返回作爲一個UIImage,其他的NSLog返回作爲零。

+2

'GET'不應該被用作此類型的方法前綴.... – bbum 2012-08-02 17:58:23

+0

你的問題中有太多的代碼。如果您將問題歸結爲重要的領域,那麼我們就可以更容易地找出問題所在。如果我不得不猜測,我會說這是因爲圖像還沒有被創建,或者當後臺線程嘗試訪問它時已經被釋放。 – Dustin 2012-08-02 18:05:46

+0

@Dustin我現在已經削減了一點。如果這可能是問題,我該如何阻止圖像被釋放?你的意思是什麼沒有被創造出來?我向你展示了上面創建的所有元素。 – Andrew 2012-08-02 18:12:56

回答

1

我有這個問題解釋說是很久以前,我認爲這是我的固定它。

調用getThumbnail需要調用背面的主線程上。

所以增加一些如:

UIImage *image; 
dispatch_async(dispatch_get_main_queue(), ^{ 
    image = [media getThumbnail]; 
}); 

UIImage *image = [media performSelectorOnMainThread:@selector(getThumbnail) withObject: nil, waitUntilDone:NO]; 

再次,這是從我的頭頂,但我敢肯定,這是我去了。

+0

我認爲你是對的。問題是這會凍結用戶界面。這有沒有其他變數?一種避開它凍結UI的方法? – Andrew 2012-08-02 19:11:31

+0

也許把getThumbnail的內容移動到原來的異步塊內? – random 2012-08-02 19:43:37

+0

我試過了。它正在訪問導致崩潰的任何核心數據項。我認爲這與新創建的核心數據有關,因爲只有在該運行中創建條目時纔會發生這種情況。 – Andrew 2012-08-02 20:34:57