ALAssetsLibrary enumerateGroupsWithTypes не возвращает данных

Я использую платформу AssetsLibrary для получения всех групп ресурсов в iPhone. У меня есть такой фрагмент кода:

NSMutableArray *groups = [[NSMutableArray alloc] initWithCapacity:5];
void (^groupEnumerator)(ALAssetsGroup*, BOOL*) = ^(ALAssetsGroup *group, BOOL *stop) {
    if(group != nil) {
        NSLog(@"Adding group %@", [group valueForProperty:ALAssetsGroupPropertyName]);
        [groups addObject:group];
    }
};

ALAssetsLibrary* library = [AssetsManager defaultAssetsLibrary];
[library enumerateGroupsWithTypes: ALAssetsGroupSavedPhotos
    usingBlock:groupEnumerator
    failureBlock:^(NSError * err) {NSLog(@"Erorr: %@", [err localizedDescription]);}];

И я обнаружил странное поведение:

1) Когда я запускаю свое приложение в симуляторе iOS (используйте команду + R в Xcode), будет выполнен groupEnumerator и имена групп будут напечатаны в консоли.

2) Я написал некоторый модульный тест для своего приложения, когда я запускаю модульный тест (используйте команду + U в Xcode), который вызывает приведенный выше фрагмент кода, поскольку он вызывается в моем приложении, groupEnumerator, похоже, не выполняется вообще и ни один имени группы будет напечатано, и failBlock тоже не вызывается, и я не получаю никаких ошибок при запуске тестов, но перечисление групп не работает, как в приложении.

Я проверяю документацию Apple, и я знаю, что этот метод (enumerateGroupsWithTypes: usingBlock: failureBlock :) является асинхронным, однако, даже если я долго жду в своем модульном тесте, я не вижу выполнения groupEnumerator.

Я тестирую iOS 5.0 с Xcode 4.2.

Любая помощь приветствуется. Спасибо.


person nybon    schedule 01.12.2011    source источник
comment
Просто чтобы прояснить здесь: это не работает только тогда, когда вы запускаете модульные тесты, верно?   -  person Michael Dautermann    schedule 01.12.2011
comment
ДА, он работает без проблем, если я запускаю приложение в симуляторе iOS, но он ничего не выводит, если я запускаю свои модульные тесты.   -  person nybon    schedule 02.12.2011


Ответы (1)


Застрял на этой проблеме в течение нескольких дней, не мог определить точную причину этой проблемы.

И вместо использования OCUnit в Xcode 4 мне пришлось переключиться на использование gh-unit, что фактически решает эту проблему. Кажется, это связано с тем, как Xcode 4 запускает тестовую цель.

http://gabriel.github.com/gh-unit

person nybon    schedule 08.12.2011