【问题标题】:iOS - Write to (or read from) file failureiOS - 写入(或读取)文件失败
【发布时间】:2014-02-25 14:37:33
【问题描述】:

这是我的代码:

-(NSArray *)getSpecialArray:(NSString *)day{
    NSString *stringURL = [NSString stringWithFormat:@"%@/%@%@", @"http://www.myDomain.com/", day, @".txt"];;
    stringURL = [stringURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSURL *url = [NSURL URLWithString:stringURL];
    NSData *urlData = [NSData dataWithContentsOfURL:url];
    NSString *filePath;

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

        filePath = [NSString stringWithFormat:@"%@/Area/%@%@", documentsDirectory, day, @".txt"];
        [urlData writeToFile:filePath atomically:YES];
    }

    NSString *content = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:NULL];

    if(content == nil){
        content = [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding];
    }

    content = [content stringByReplacingOccurrencesOfString:@"Main Menu\n" withString:@""];

    splitData = [content componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"\n\n"]];


    return splitData;
}

似乎正在发生的事情是写入文件部分不起作用。该行的内容似乎总是 == nil。也可能是它写得很好,并且无论出于何种原因都不能很好地读取文件,尽管我倾向于前一种选择。有人看到此代码有任何问题吗?假设这是第一次运行此代码并且正在写入的文件夹和文件不存在。这个问题似乎是在切换到 Mountain Lion 并升级 Xcode 后立即出现的。

【问题讨论】:

    标签: ios nsdata writetofile


    【解决方案1】:

    问题在于创建 URL。

    NSString *stringURL = [NSString stringWithFormat:@"%@/%@%@", @"http://www.myDomain.com/", day, @".txt"];
    

    您在格式化程序以及 URL 值中附加 "/"。 因此,您的最终到达 URL 将变为 http://www.myDomain.com//filename.txt。这是一个无效的 URL。

    通过从任一位置删除 "/" 来纠正它。

    NSString *stringURL = [NSString stringWithFormat:@"%@%@%@", @"http://www.myDomain.com/", day, @".txt"];
    

    【讨论】:

    • 我确信这会解决它,但我错了。内容仍然为零。
    【解决方案2】:

    首先,检查您的文件是否真的在文件系统上创建和/或检查[urlData writeToFile:filePath atomically:YES]; 调用的返回值。

    如果文件存在且方法返回YES,则问题出在读取数据上。将NSError** 传递给stringWithContentsOfFile: encoding: error: 并检查它。另外,不要对对象使用NULL,而是使用nil

    【讨论】:

    • 我该如何检查它的返回值?我以前从来没有这样做过。这是我的第一个 iPhone 应用程序,所以我真的不太确定如何做。
    • BOOL 结果 = [urlData writeToFile:filePath atomically:YES]; if (!result){NSLog(@"发生错误");}
    • 我得到的结果=NO。
    • 表示写不成功。使用 writeToFile:options:error 获取特定错误。
    • 我想通了,我不能再向它写入 NSData,我必须先将其转换为字符串。与其把代码写下来,不如你编辑你的答案以包含以下内容,这样我就可以给你信用了:path = [[self applicationDocumentsDirectory].path stringByAppendingPathComponent:[NSString stringWithFormat:@"%@%@",一天,@".txt"]]; [[[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding] writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];
    猜你喜欢
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多