最近自己写个小Demo,想存一张图片到沙盒中,在模拟器中各种好使,一旦运行在真机中就写入失败,当然读取也是失败的。最终发现自己出现了一个非常low的错误(PS:导致在google上搜了很久没有答案)
不说了,直接上代码:
#pragma mark - 存图片到沙盒
- (void)writeDataToFile:(UIImage *)image {
NSString *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
// 正确路径
NSString *filePath = [docPath stringByAppendingPathComponent:@"RZUserData.data"];
// 错误路径
NSString *errorFilePath = [docPath stringByAppendingString:@"RZUserData.data"];
NSData *imgData = UIImagePNGRepresentation(image);
[imgData writeToFile:filePath atomically:YES];
}
#pragma mark - 从沙盒读取照片
- (UIImage *)readImageFromFile {
NSString *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *filePath = [docPath stringByAppendingPathComponent:@"RZUserData.data"];
NSData *imgData = [NSData dataWithContentsOfFile:filePath];
UIImage *image = [UIImage imageWithData:imgData];
return image;
}
如上面代码所示,如果使用了错误路径则会导入模拟器上读写沙盒均成功,而运行到真机上失败。
另外有个小技巧去判断自己是写入失败还是读取失败
- 判断是否写入失败
BOOL writeSuccess = [imgData writeToFile:filePath atomically:YES];
if(writeSuccess) {
NSLog(@"写入成功!");
} else {
NSLog(@"写入失败!");
}
- 判断是否是读取失败
这个就不用解释了吧,直接判断读取的结果是否有值就可以了。
网友评论