iOS低级失误——模拟器写入沙盒成功,真机写入失败

2017-01-24  本文已影响1353人  reloadRen

最近自己写个小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(@"写入失败!");
}
上一篇下一篇

猜你喜欢

热点阅读