Загрузить данные EXC BAD ACCESS (только устройство)
Когда мои пользовательские данные загружаются на iPhone (3G, с 3.1), я получаю Exc Bad Access в этой строке:
NSMutableArray* dataArr = [NSKeyedUnarchiver unarchiveObjectWithFile:pathGG]; //=EXC BAD ACCESS
На Ipad и на симуляторе работают
Я сохраняю данные в симуляторе (в путь к DocumentsDirectory), затем заменяю данные в проект и загружаю из [NSBundle mainBundle]
В массиве я использую NSValue для магазина CGPoint.
Полный источник:
-(void) SaveData:(NSMutableArray*)dataLevel {
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* documentsDirectory = [paths objectAtIndex:0];
NSString* fileName = @"data.dat";
NSString* pathGG = [documentsDirectory stringByAppendingPathComponent:fileName]; // retain];
BOOL isWrite = [NSKeyedArchiver archiveRootObject:dataLevel toFile:pathGG];
if(isWrite) NSLog(@"YES");
else NSLog(@"!!!");
}
+(NSMutableArray*) LoadData {
NSString* fileName = @"data.dat";
NSString* pathGG = [[NSBundle mainBundle] pathForResource:fileName ofType:@"dat"]; // retain];
NSMutableArray* dataA = [NSKeyedUnarchiver unarchiveObjectWithFile:pathGG]; //EXC BAD ACCESS
return dataA;
}
Если я использую следующий способ (сохранение / загрузка тем же методом), я также получаю EXC BAD ACCESS:
NSKeyedUnarchiver* decoder = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
NSArray* dataArr = [decoder decodeObjectForKey:@"dataLevel"]; //EXC BAD ACCESS
2 ответа
Попробуй это:
NSString* pathGG = [[documentsDirectory stringByAppendingPathComponent:fileName] retain];
Затем, когда вы закончите с этим:
[pathGG release]
РЕШЕНИЕ: вместо магазина CGPoint
в NSValue
использовать CGPointFromString
(после NSStringFromCGPoint
), а затем добавьте строку в массив.
NSString* positionStr = NSStringFromCGPoint(someCGPoint);
[someArray addObject:position];
// Now, saving array to file
...
// после загрузки массива из файла
CGPoint positon = CGPointFromString([someArr objectAtIndex:0]);