不兼容的整数到指针转换?什么?

时间:2013-04-01 19:25:11

标签: iphone ios ipad

我正在阅读用UTF8编码的txt文件。

我正在阅读该文件。我有这样的话:

- (NSString *) readFromFile {

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


    NSString *fileName = [NSString stringWithFormat:@"%@/textfile.txt",
                          documentsDirectory];
    return [[NSString alloc] initWithContentsOfFile:fileName
                        usedEncoding:NSUTF8StringEncoding
                        error:nil];
}

我在最后一行有这个错误:

与指针转换不兼容的整数将int发送到NSUTF8StringEncoding * 类型的参数

为什么?

3 个答案:

答案 0 :(得分:5)

这里的关键是“使用 d 编码”中的“d”。

该参数用于将信息传递给调用者,使用使用来读取文件。

这意味着它是NSString类,它通知调用者它用于从文件中的原始数据创建对象的编码 - 而可以指示调用者的调用者关于使用哪种编码的类。

要获取此信息,您需要声明一个变量并传递对它的引用,以便NSString类对象可以将信息放入其中,以便稍后在需要时阅读。

NSStringEncoding enc;

NSString *result = [[NSString alloc] initWithContentsOfFile:fileName
                    usedEncoding: &enc
                    error:nil];

// Do something with the information about the encoding used
if ( enc == NSUTF8StringEncoding ) {
     // ...
}

return result;

答案 1 :(得分:1)

使用:
initWithContentsOfFile:encoding:error:

答案 2 :(得分:1)

initWithContentsOfFile:usedEncoding:error:
Returns an NSString object initialized by reading data from the file at a given path and returns by reference the encoding used to interpret the characters.

- (id)initWithContentsOfFile:(NSString *)path usedEncoding:(NSStringEncoding *)enc error:(NSError **)error
Parameters
path
A path to a file.
enc
Upon return, if the file is read successfully, contains the encoding used to interpret the file at path.
error
If an error occurs, upon returns contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.

这是来自文档: - )

所以基本上,就像@Monolo所说,这用于返回编码类型而不是设置它。 如果你想设置它,你必须使用: - (id)initWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error