在iPhone中检索文本文件时出现问题

在iPhone中检索文本文件时出现问题,iphone,objective-c,Iphone,Objective C,我使用以下代码将文本文件写入de Documents文件夹: NSArray *filePaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *fileDocumentsDirectory = [filePaths objectAtIndex:0]; NSString *fullPath = [fileDocumentsDirectory stri

我使用以下代码将文本文件写入de Documents文件夹:

NSArray *filePaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *fileDocumentsDirectory = [filePaths objectAtIndex:0];    
NSString *fullPath = [fileDocumentsDirectory stringByAppendingPathComponent:self.fileName];
NSData *tmpData = [NSData dataWithBytes:self.content length:[self.content length]];
[tmpData writeToFile:appFile atomically:YES];
NSURL *url = [[NSURL alloc] initWithString:tmpField.text];
NSURLRequest *req = [[NSURLRequest alloc] initWithURL:url];

NSHTTPURLResponse *response = nil;
NSError *error = nil;

NSData *responseData = [NSURLConnection sendSynchronousRequest:req
                                                     returningResponse:&response
                                                                 error:&error];
if(response == nil) {
    // TO BE CONTINUED           
}
NSInteger statusCode = [response statusCode];
NSString *contentType = [[response allHeaderFields] objectForKey:@"Content-Type"];

if(statusCode >= 200 && statusCode < 300 && [contentType hasPrefix:@"text"]) {
    NSString *payloadAsString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
如果我直接用NSData的内容创建一个字符串,它会工作,所以数据看起来是正常的。我通过以下方式检索文件:

NSString *fileContents = [[NSString alloc] initWithContentsOfFile:fullPath usedEncoding:nil error:nil];

或者输入NSData,然后从那里输入一个字符串

NSData *fileContentsData = [NSData dataWithContentsOfFile:fullPath];
NSString *fileContents = [[NSString alloc] initWithData:fileContentsData encoding:NSUTF8StringEncoding];
在这两种情况下,fileContents都为null。我快疯了,我就是不明白为什么文件内容是空的。我用NSLog检查了每个值,“self.content”包含值,NSData包含相同的值。。。但尝试检索它们会返回null,或者尝试使用NSUTF16StringEncoding,我检索。。。中文字符,但不能为空

它一定与编码有关,但tmpData使用UTF-8并从中初始化一个字符串。它的工作方式就像一个符咒,问题似乎是当我读/写文件时

我现在头晕,你能帮我一下吗

提前感谢:)

编辑:我刚刚尝试从URL打开一个.txt文件,代码如下:

NSArray *filePaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *fileDocumentsDirectory = [filePaths objectAtIndex:0];    
NSString *fullPath = [fileDocumentsDirectory stringByAppendingPathComponent:self.fileName];
NSData *tmpData = [NSData dataWithBytes:self.content length:[self.content length]];
[tmpData writeToFile:appFile atomically:YES];
NSURL *url = [[NSURL alloc] initWithString:tmpField.text];
NSURLRequest *req = [[NSURLRequest alloc] initWithURL:url];

NSHTTPURLResponse *response = nil;
NSError *error = nil;

NSData *responseData = [NSURLConnection sendSynchronousRequest:req
                                                     returningResponse:&response
                                                                 error:&error];
if(response == nil) {
    // TO BE CONTINUED           
}
NSInteger statusCode = [response statusCode];
NSString *contentType = [[response allHeaderFields] objectForKey:@"Content-Type"];

if(statusCode >= 200 && statusCode < 300 && [contentType hasPrefix:@"text"]) {
    NSString *payloadAsString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
NSURL*url=[[NSURL alloc]initWithString:tmpField.text];
NSURLRequest*req=[[NSURLRequest alloc]initWithURL:url];
NSHTTPURLResponse*响应=nil;
n错误*错误=nil;
NSData*responseData=[NSURLConnection sendSynchronousRequest:req
returningResponse:&响应
错误:&错误];
如果(响应==nil){
//待续
}
NSInteger statusCode=[response statusCode];
NSString*contentType=[[response allHeaderFields]objectForKey:@“内容类型”];
如果(状态码>=200&&statusCode<300&&[contentType hasPrefix:@“text”]){
NSString*payloadAsString=[[NSString alloc]initWithData:responseData编码:NSUTF8StringEncoding];

我已经检查过了,程序到达了最后一行,但是payloadAsString是…没错,也是零。那么我做错了什么呢?

什么是
self.content
类型?如果它是
NSString
,那么使用
-[NSString dataUsingEncoding:NSUTF8StringEncoding]
方法,而不是
-[NSData initWithBytes:]
获取您的
NSData
对象。

尝试使用NSMacOSRomanStringEncoding读取文件以进行更改-刚刚发生在我身上,完全相同的症状。根据此建议,作为字符串“OAOAk”的内容,我收到的是“`+Ì”.我对这件事失去了理智,这没有意义,因为我没有在任何地方更改编码,“self.content”它只是一个UITextView.text.Hey,成功了!谢谢。现在,从url加载文本文件时,我仍然遇到同样的问题。有什么线索吗?因为我在那里用NSData*responseData=[NSURLConnection sendSynchronousRequest:req returningResponse:&response error:&error];以及NSString*payloadAsString=[[NSString alloc]initWithData:responseData encoding:NSUTF8StringEncoding];的字符串。再次感谢!此时我会选择使用(广泛使用且推荐)HTTP请求库ASIHTTPRequest。我自己使用它,没有响应编码问题,因为它在内部将响应数据存储为NSData和NSString对象。有关它的更多信息和下载链接。谢谢你的提示!如果我现在尝试一下,我的女朋友会把我踢出家门(而且很冷)所以我会把它放进书签,明天再看。