14

我正在尝试熟悉目标 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 的新手。

编辑: 我很抱歉之前没有提到这一点。我没有收到任何错误。我的数组只是空的。

4

2 回答 2

32

我将建议进行一些简化,这可能会解决您的问题,因为我无法说出您的问题是什么。根据信息,我不确定您在读取文件时是否获得了正确的文件内容。

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]);  
于 2013-04-25T19:26:08.370 回答
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;
}
于 2015-05-15T10:42:11.823 回答