当我的自定义数据加载到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
答案 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]);