Как изменить значение int в блоке? - PullRequest
2 голосов
/ 03 апреля 2012

Как изменить значение 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);

1 Ответ

7 голосов
/ 03 апреля 2012

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

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

...