iOS:某些文件无法打开

时间:2015-03-29 17:31:24

标签: ios

我正在尝试将图片文件作为NSString加载,但所有这些文件都使用以下代码nil出现:

NSString *path = [[NSBundle mainBundle] pathForResource:[NSString stringWithUTF8String:name.data()] ofType:nil];

NSString *da = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];

我可以加载许多文件,但所有JPEG和PNG文件都因某些原因而失败。我认为它可能与编码有关,所以我把它切换到usedEncoding,但它仍然没有用。

我错过了什么?

编辑:

我一直在使用C ++制作iOS / Android跨平台OpenGL图形库。一切都有效,除了纹理加载。从磁盘加载的任何文件都通过一个在系统之间抽象的函数。我需要STL字符串中的图像文件,以便我可以将它传递给图像解析库以获取原始像素数据。

我只是认为我所拥有的功能可以打开除图像之外的任何文件。

1 个答案:

答案 0 :(得分:1)

如果您运行代码,则传递NSError实例而不是nil

NSError *error = nil;
NSString *string = [NSString stringWithContentsOfFile:filePath
                                             encoding:NSUTF8StringEncoding
                                                error:&error];

你会看到stringWithContentsOfFile无法打开图像文件,返回nil并且给出的错误是:

  

错误域= NSCocoaErrorDomain代码= 261"无法完成操作。 (可可错误261。)" ...

Cocoa错误261是NSFileReadInapplicableStringEncodingError,这意味着文件的编码与您传递的文件(NSUTF8StringEncoding)不同。但我尝试过其他编码,但没有一个适用于PNG文件。

您仍然可以通过将文件加载为UIImage然后将UIImage转换为Base64字符串来实现您的目的。

  • iOS 7 以来,这更容易,因为您可以使用内置方法base64EncodedStringWithOptions

    // Load the image and convert it to NSData
    UIImage *image = [UIImage imageNamed:@"yourImageName"];    
    NSData *imageData = UIImagePNGRepresentation(image);
    // You can use the equivalent UIImageJPEGRepresentation() for JPEG images
    
    // Convert NSData to a Base64 NSString
    NSString *base64ImageString = [imageData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
    
  • iOS 7 之前,你可以做同样的事情,但你必须实现你自己的Base64编码方法(或者导入任何一个已经可用,例如nicklockwood/Base64)。