Можете ли вы установить точку останова, очистить кеш (например, удалить свое приложение), а затем пройти через этот бит кода (ASIDownloadCache.m, строка 184, метод storeResponseForRequest):
if ([request responseData]) {
[[request responseData] writeToFile:dataPath atomically:NO];
} else if ([request downloadDestinationPath] && ![[request downloadDestinationPath] isEqualToString:dataPath]) {
NSError *error = nil;
[[[[NSFileManager alloc] init] autorelease] copyItemAtPath:[request downloadDestinationPath] toPath:dataPath error:&error];
}
Проверьте, какиепуть следует, и проверьте размер request.responseData.
** EDIT **
Ваша проблема заключается в использовании didReceiveData:
- (void) request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data {
[imageDataLoadedFromURL appendData:data];
}
Чтобы процитировать документацию asi http-запроса:
Если вам нужно обработать ответ по мере его поступления (например, вы хотите использовать потоковый анализатор для анализа ответа, пока он ещезагружается), попросите делегата реализовать запрос: didReceiveData: (см. ASIHTTPRequestDelegate.h). Обратите внимание, что при этом ASIHTTPRequest не будет заполнять responseData или записывать ответ для downloadDestinationPath - вы должны сохранить ответ самостоятельно, если вам нужно.
Похоже, последнее предложениетакже применимо к кешированию данных.
Это, вероятно, ошибка в asihttprequest, на самом деле она не должна либо записывать данные в кеш в этом случае, либо должна удостовериться, что она записывает правильные данные - в настоящее время похоже, что она пишет неверныезапись в кеш.Вам нужно обрабатывать данные по мере их поступления?Если нет, просто удалите «didReceiveBytes» и используйте только те данные, которые указаны в request.responseData в requestFinished.