【问题标题】:Load data EXC BAD ACCESS (only device)加载数据 EXC BAD ACCESS(仅限设备)
【发布时间】:2011-03-11 19:14:19
【问题描述】:

当我的自定义数据在 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

【问题讨论】:

  • 调试检查这些变量/指针是否为 NIL
  • 在保存方法中所有变量都不为零。在加载方法中,pathGG 不是 nil,(顺便说一下,如果找不到文件,我不会得到 EXC BAD ACCESS)。我注意到,当我在模拟器中调试时,第一秒内 dataArr 的值“无效总和”,但在一些字节之后。

标签: ios iphone save load exc-bad-access


【解决方案1】:

试试这个:

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

然后当你完成它时:

[pathGG release]

【讨论】:

  • 我在模拟器中保存数据(到documentsDirectory路径),然后将数据替换到项目中,并从Iphone上的[NSBundle mainBundle]加载。
【解决方案2】:

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

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

//从文件中加载数组后

CGPoint positon = CGPointFromString([someArr objectAtIndex:0]);                  

【讨论】:

  • 这不能回答你的问题。
猜你喜欢
  • 1970-01-01
  • 2011-11-29
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 2020-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多