【问题标题】:Can't get Images from the iPhone device folder无法从 iPhone 设备文件夹中获取图像
【发布时间】:2011-10-11 06:00:49
【问题描述】:

我正在尝试从设备 (iPhone) 中获取一些图像并将它们显示在屏幕上。

图像文件保存在我的设备上并分隔在如下文件夹中:(...)/Documents/1/image1.png。

这是我试图获取图像的函数的代码

-(UIImage *) getImageFromDevice:(NSString *) fileName 
                        idImage:(int)        idImage{

    NSString *path;

    path = [[self dataFilePath] stringByAppendingString:@"/"];
    path = [path stringByAppendingString: [[NSString alloc] initWithFormat:@"%d",idImage]];
    path = [path stringByAppendingString:@"/"];
    path = [path stringByAppendingString:fileName];

    NSLog(@"path = %@", path);

    NSURL *deviceImageUrl = [[NSURL alloc] initWithString:path];
    NSData *imageData = [NSData dataWithContentsOfURL:deviceImageUrl];
    UIImage *deviceImage = [UIImage imageWithData:imageData];

    return deviceImage;

}

这是获取正常工作的设备文件夹路径的函数:

-(NSString *)dataFilePath{

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    return documentsDirectory;

}

但是当我使用 [[NSURL alloc] initWithString:path] 设置 NSURL *deviceImageUrl 时,deviceImageUrl 变为 nil

我做错了什么?

【问题讨论】:

  • 我在模拟器上试试。

标签: iphone objective-c uiimage device nsurl


【解决方案1】:

尝试使用 fileURLWithPath: 而不是 URLWithString: ;)

NSURL *deviceImageUrl = [NSURL fileURLWithPath:path]; // autoreleased url

我也总是搞砸这两种方法……它们让我发疯。

【讨论】:

  • [NSURL initWithPath:]:无法识别的选择器发送到实例 0x4c17ea0
  • 你不应该调用 initWithPath:。调用 [NSURL fileURLWithPath:myPath];这是一个类方法和is implemented in iOS
  • 嗯...你的答案也是正确的...我没有写正确的代码...对不起=/
【解决方案2】:
//NSURL *deviceImageUrl = [[NSURL alloc] initWithString:path];
//NSData *imageData = [NSData dataWithContentsOfURL:deviceImageUrl];
//UIImage *deviceImage = [UIImage imageWithData:imageData];    
UIImage *deviceImage = [[[UIImage alloc] initWithContentsOfFile:path]autorelease];

【讨论】:

  • 尝试这样做:NSString *path = [[NSString alloc]init] 而不是仅仅使用方便的构造函数;不要忘记释放它
  • 同样的问题...路径可能很好...因为 NSLog 正在打印正确的路径...所以 NSURL *deviceImageUrl 有问题
  • 这真的是对问题的评论,而不是答案。
  • 对我有用: UIImage *images = [[UIImage alloc] initWithContentsOfFile:path];不要忘记释放
  • 谢谢!我已经添加了自动释放,因为我必须返回 UIImage
【解决方案3】:

您不应使用 initWithString: ,它必须符合 RFC 中描述的 URL 格式。如果你只想使用系统路径,使用这个:(使用后不要忘记释放)

NSURL *deviceImageUrl = [[NSURL alloc] initFileURLWithPath:path isDirectory:NO];

【讨论】:

    猜你喜欢
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多