Мое приложение отображает плитки OpenStreetMap (256 * 256 изображений) и кэширует их на диске, пока пользователь просматривает карту.Триггеры NSData.write ECX_BAD_ACCESS на iOS 8
На iOS 10 все в порядке, но на iOS 8 приложение вылетает (EXC_BAD_ACCESS), если я не пишу NSData атомарно. Нет никаких проблем, чтобы сделать это атомарно, но я хотел бы понять, что происходит.
Вот соответствующий код, я использую:
private func putInCache(key:NSString, data:NSData) {
// Get the path:
let path:String = "\(self.imagesFolderPath)/\(key)";
var success:Bool = false;
// Save the image, if it does not exists:
if(!FileManager.default.fileExists(atPath:path)) {
// Run in background:
DispatchQueue.global().async {
// Put the image in the memory cache:
self.memoryCache.setObject(data, forKey:key);
// Insert the row in the database:
let success = insertDataInDb(...);
// Then save the file (if the DB insertion succeeded):
if(success) {
data.write(toFile:path, atomically:false); // If I set atomically to true, it works.
}
}
}
}
ли кому-то знает, почему существует разница между записью данных атомарно или нет?