Я пытаюсь использовать URLByResolvingBookmarkData
для извлечения сохраненной закладки безопасности, но у меня возникают проблемы.
Я использую стороннюю библиотеку (wxWidgets), которая упаковывает вызов функции в NSAutoreleasePool
. Кажется, все работает нормально, за исключением того, что когда этот пул выпущен, я получаю сбой EXC_BAD_ACCESS
в objc_release
, а именно:
frame #0: 0x00007fff7b2d4184 libobjc.A.dylib objc_release + 36
frame #1: 0x00007fff7b2d5087 libobjc.A.dylib (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 817
frame #2: 0x00007fff540aaa56 CoreFoundation _CFAutoreleasePoolPop + 22
frame #3: 0x00007fff561e7b56 Foundation -[NSAutoreleasePool release] + 144
...
Я сузил его до этого раздела кода:
NSData *bookmarkData = [NSData dataWithBytes:data length:len];
NSURL *url = [NSURL URLByResolvingBookmarkData:bookmarkData
options:NSURLBookmarkResolutionWithSecurityScope
relativeToURL:nil
bookmarkDataIsStale:&bookmarkDataIsStale
error:&error];
Если я вернусь до URLByResolvingBookmarkData
или если я изменю его на NSURL *url = [[NSURL alloc] init]
, все будет хорошо: пул может быть освобожден без сбоев. (Я имею в виду, что он не работает должным образом, так как закладка не разрешена, но, по крайней мере, она не падает.)
Фактически, у меня есть песочница без песочницы того же приложения, которая в остальном идентична (будучи без песочницы, она не использует этот конкретный кусок кода, поэтому он просто #ifdef
исключен) и работает без проблема.
Есть ли что-то явно глупое, что я делаю при использовании URLByResolvingBookmarkData
? (Я также пробовал initByResolvingBookmarkData
с тем же эффектом.)