从文本文件中读取 - 目标C.

时间:2013-04-25 19:00:39

标签: iphone ios objective-c

我正在尝试熟悉目标C,我目前的目标是读取文本文件中的项目列表并将它们存储在NSString数组中。

目前这就是我所拥有的:

NSString *filepath = [[NSBundle mainBundle] pathForResource:@"myList" ofType:@"txt"];
NSData* data = [NSData dataWithContentsOfFile:filepath];
NSString* string = [[NSString alloc] initWithBytes:[data bytes]
                                             length:[data length]
                                           encoding:NSUTF8StringEncoding];

NSString* delimiter = @"\n";
listArray = [string componentsSeparatedByString:delimiter];

我不确定这是否重要,但myList.txt在我的支持文件中。

目前,我的列表中只有一个项目。但是我甚至无法将该1个项目存储到我的listArray

我确信我缺少了一些愚蠢的东西,我只是对Objective C的新手。

修改 我很抱歉没有提到这个。我没有收到任何错误。我的数组只是null。

2 个答案:

答案 0 :(得分:26)

我会建议一些可以解决你的问题的简化,因为我不能说你的问题是什么。根据信息,我不确定你是否在阅读时获得了正确的文件内容。

NSString *filepath = [[NSBundle mainBundle] pathForResource:@"myList" ofType:@"txt"];
NSError *error;
NSString *fileContents = [NSString stringWithContentsOfFile:filepath encoding:NSUTF8StringEncoding error:&error];

if (error)
    NSLog(@"Error reading file: %@", error.localizedDescription);

// maybe for debugging...
NSLog(@"contents: %@", fileContents);

NSArray *listArray = [fileContents componentsSeparatedByString:@"\n"];
NSLog(@"items = %d", [listArray count]);  

答案 1 :(得分:3)

如果文件内容如下:

[{"Title":"20","Cost":"20","Desc":""},{"Title":"10","Cost":"10.00","Desc":""},{"Title":"5","Cost":"5.00","Desc":""}]

试试这个

-(id)readFromDocumentDBFolderPath:(NSString *)fileName
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *appFile = [documentsDirectory stringByAppendingPathComponent:fileName];
    NSFileManager *fileManager=[NSFileManager defaultManager];
    if ([fileManager fileExistsAtPath:appFile])
    {
        NSError *error= NULL;
        NSData* data = [NSData dataWithContentsOfFile:appFile];
        id resultData = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
        if (error == NULL)
        {
            return resultData;
        }
    }
    return NULL;
}