Objective-C - ошибка EXC_BAD_ACCESS с ALAsset и XmlWriter

Я использую ALAssetLibrary получить информацию об изображениях на устройстве (IOS Simulator) на данный момент. Теперь, когда у меня есть необходимая информация, я хочу написать их как xml file, Для этого я использую XmlStreamWriter ( https://github.com/skjolber/xswi) простой и удобный в использовании. Моя проблема в том, что у меня EXC_BAD_ACCESS (code=1) ошибка при запуске приложения. Я знаю, что это связано с streamWriter потому что, если я прокомментирую эти строки кода, программа будет работать отлично. Здесь есть мой код (я использую ARC):

XMLWriter* xmlWriter = [[XMLWriter alloc]init];
[xmlWriter writeStartDocumentWithEncodingAndVersion:@"UTF-8" version:@"1.0"];
[xmlWriter writeStartElement:@"Photos"]; 
NSMutableArray *list = [[NSMutableArray alloc] init];
ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init];
[library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if (group) {
   [group setAssetsFilter:[ALAssetsFilter allPhotos]];
   [group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop){
       if (asset){
                [xmlWriter writeStartElement:@"Photos"];
                NSString *description = [asset description];
                NSRange first = [description rangeOfString:@"URLs:"];
                NSRange second = [description rangeOfString:@"?id="];
                NSString *path = [description substringWithRange: NSMakeRange(first.location + first.length, second.location - (first.location + first.length))];
                [xmlWriter writeAttribute:@"id" value:path];
                [xmlWriter writeEndElement:@"Photos"];                    
            }
        }];
    }
} failureBlock:^(NSError *error) {
    NSLog(@"error enumerating AssetLibrary groups %@\n", error);
}];
[xmlWriter writeEndElement];
[xmlWriter writeEndDocument];
NSString* xml = [xmlWriter toString];
NSLog(@"XML: %@", xml);

Есть идеи, в чем может быть проблема?

У меня также есть изображение с соответствующей ошибкой:Ошибка изображения

Спасибо

1 ответ

enumerateGroupsWithTypes вызывает блок для асинхронной обработки найденной информации. Итак, вы звоните [xmlWriter writeEndDocument прежде чем вы на самом деле написали какой-либо реальный контент в писателя.

Вам нужно изменить способ завершения операции записи, чтобы она выполнялась внутри блока и когда group передается как nil, Добавить else заблокировать существующий чек и положить

[xmlWriter writeEndElement];
[xmlWriter writeEndDocument];
NSString* xml = [xmlWriter toString];
NSLog(@"XML: %@", xml);

В нем (и что бы вы ни делали впоследствии).

Другие вопросы по тегам