2012-04-03 2 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

+2

Если это ваш реальный код, тогда проблема в том, что блок не выполняется в этой точке, только что определен. Где именно находится второй «NSLog», расположенный в вашем коде? Вы действительно видите «необходимый размер» в журнале до «out block value», или они наоборот? –

+0

Одна секунда .. я скоро ее обновлю! –

ответ

7

Проблема заключается в том, что вы посылаете, что преградить будет выполняться через некоторое время, после того, как метод assetForURL:... сделал свою работу, которую он делает асинхронно. Скорее всего, это в фоновом потоке или очереди, позволяя самому методу немедленно возвращаться, пока работа продолжается.

Так метод assetForURL:... возвращает , прежде чем ваш resultBlock закончилась, то есть значение еще не изменилось, к тому времени, вы получите второй NSLog. Все работает нормально; вы просто проверяете значение слишком рано.

+0

thx для объяснения^_ ^ –

Смежные вопросы