2012-04-03 184 views
2

如何變化int值塊,我有這樣的:如何更改塊中的int值?

__block long long size = -1; 
ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset) 
{ 

    ALAssetRepresentation * rep = [myasset defaultRepresentation]; 
    size = [rep size]; 
    //here showed normal value 
    NSLog(@"needed size : %lld",size); 
}; 
ALAssetsLibrary* assetslibrary = [[[ALAssetsLibrary alloc] init] autorelease]; 
[assetslibrary assetForURL:self.tmpVideoURL 
       resultBlock:resultblock 
       failureBlock:nil]; 

//but here remaind -1 
NSLog(@"out block value : %lld",size); 
+0

什麼是超長的? – Ali 2012-04-03 16:31:18

+2

如果這是你真正的代碼,那麼問題在於,Block剛剛沒有被執行。你的代碼中的第二個'NSLog'究竟在哪裏?實際上在「out block value」之前是否在日誌中看到「需要的大小」,或者他們是否相反? – 2012-04-03 16:32:12

+0

一秒鐘..我會盡快更新! – 2012-04-03 16:34:20

回答

7

的問題是,您所發送的是封鎖某個時候在以後執行,該assetForURL:...方法已完成其工作,它做後異步。這很可能在後臺線程或隊列中,允許方法本身在工作繼續時立即返回。

所以assetForURL:...返回你的resultBlock已運行之前,這意味着該值的方法還沒有被改變,由你到了第二NSLog的時間。一切工作正常;你只是太早檢查價值。

+0

thx用於說明^ _ ^ – 2012-04-03 17:05:18