加载数据EXC BAD ACCESS(仅限设备)

时间:2011-03-11 19:14:20

标签: ios iphone save load 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 个答案:

答案 0 :(得分:0)

试试这个:

NSString* pathGG = [[documentsDirectory stringByAppendingPathComponent:fileName] retain];

然后当你完成它:

[pathGG release]

答案 1 :(得分:0)

解决方案:使用CGPoint(在NSValue之后),而不是在CGPointFromString中存储NSStringFromCGPoint,然后将字符串添加到数组中。

NSString* positionStr = NSStringFromCGPoint(someCGPoint); 
[someArray addObject:position];
// Now, saving array to file
...

//从文件

加载数组后
CGPoint positon = CGPointFromString([someArr objectAtIndex:0]);