美文网首页
iOS低级失误——模拟器写入沙盒成功,真机写入失败

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

作者: reloadRen | 来源:发表于2017-01-24 17:54 被阅读1353次

    最近自己写个小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(@"写入失败!");
    }
    
    • 判断是否是读取失败
      这个就不用解释了吧,直接判断读取的结果是否有值就可以了。

    相关文章

      网友评论

          本文标题:iOS低级失误——模拟器写入沙盒成功,真机写入失败

          本文链接:https://www.haomeiwen.com/subject/kznzbttx.html