Различное поведение между iPhone и iPad с библиотекой активов - PullRequest
1 голос
/ 26 августа 2011

Я использую библиотеку ресурсов в приложении для перечисления событий фотографий устройства.

Мой код работает нормально, когда я тестирую его на своем iPad.События Фотографии перечислены, и я могу справиться с ними отлично.Когда я пытаюсь использовать тот же код на моем iPhone, ничего не происходит (и у меня есть фотографии событий на этом устройстве тоже).Похоже, код перечисления даже не вызывался (т. Е. В консоли не отображается журнал, см. Код).

Вот код:

- (void)loadEvents {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
    [library enumerateGroupsWithTypes:ALAssetsGroupEvent
                           usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
                               if (group) {
                                   [photosEventsArray addObject:group];
                                   NSLog(@"Adding group");
                               } else {
                                   NSLog(@"End of the enumeration");
                               }
                           }
                         failureBlock: ^(NSError *error) {
                     NSLog(@"Failure while enumerating assets: %@", error);
                         }];
    [library release];

    NSLog(@"Found %d events", photosEventsFound);

    [self performSelectorOnMainThread:@selector(stopSpinner) withObject:nil waitUntilDone:YES];
    [pool drain];
}

Моя цель развертывания - iOS4.1.

Есть идеи, что здесь происходит не так?

1 Ответ

1 голос
/ 31 августа 2011

После дополнительных исследований кажется, что в iOS 4.3.5 метод enumerateGroupsWithTypes должен вызываться из основного потока.

Я пропатчил свой код следующим образом (установив НЕТ на iPhone и iPod Touch и ДА на iPad):

if (scanAssetsInBackground) {
    [self performSelectorInBackground:@selector(loadEvents) withObject:nil];
} else {
    [self performSelectorOnMainThread:@selector(loadEvents) withObject:nil waitUntilDone:YES];
}

Прекрасно работает с этим патчем.

В документации Apple не так много информации об этом, и нет способа узнать, какой путь (фоновый или основной поток) является правильным способом сканирования библиотек ресурсов.

...