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);
В нем (и что бы вы ни делали впоследствии).