Ios 导入csv数据(SDK iphone)

Ios 导入csv数据(SDK iphone),ios,iphone,cocoa-touch,csv,nsstring,Ios,Iphone,Cocoa Touch,Csv,Nsstring,对于下面的代码,我可以读取字符串中的所有数据,并成功获取用于绘图的数据 NSMutableArray *contentArray = [NSMutableArray array]; NSString *filePath = @"995,995,995,995,995,995,995,995,1000,997,995,994,992,993,992,989,988,987,990,993,989"; NSArray *myText = [filePath componentsSeparatedBy

对于下面的代码,我可以读取字符串中的所有数据,并成功获取用于绘图的数据

NSMutableArray *contentArray = [NSMutableArray array];
NSString *filePath = @"995,995,995,995,995,995,995,995,1000,997,995,994,992,993,992,989,988,987,990,993,989";
NSArray *myText = [filePath componentsSeparatedByString:@","];  
NSInteger idx;    
for (idx = 0; idx < myText.count; idx++) {
    NSString *data =[myText objectAtIndex:idx];
    NSLog(@"%@", data);
    id x = [NSNumber numberWithFloat:0+idx*0.002777778];
    id y = [NSDecimalNumber decimalNumberWithString:data];          
    [contentArray addObject:
    [NSMutableDictionary dictionaryWithObjectsAndKeys:x, @"x", y, @"y", nil]];    
}

self.dataForPlot = contentArray;
我运行代码,它应该给出相同的图形输出。但是,似乎没有成功地从CSV文件加载数据。 我无法找出我的代码出了什么问题

NSMutableArray *contentArray = [NSMutableArray array];
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"csv"];
NSString *Data = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil ];    
if (Data)
{
    NSArray *myText = [Data componentsSeparatedByString:@","];
    NSInteger idx;    
    for (idx = 0; idx < myText.count; idx++) {
        NSString *data =[myText objectAtIndex:idx];
                    NSLog(@"%@", data);
        id x = [NSNumber numberWithFloat:0+idx*0.002777778];
        id y = [NSDecimalNumber decimalNumberWithString:data];        
        [contentArray addObject:
        [NSMutableDictionary dictionaryWithObjectsAndKeys:x, @"x", y, @"y",nil]];    
    }
    self.dataForPlot = contentArray;

}

我在这里做错了什么吗?

我设置了一个示例项目,并尝试了这段代码,它成功了

两个最可能的误差点是

您没有获取文件路径,即文件路径为零 您没有正确读取文件。 我建议加上:

NSLog( @"filePath: %@", filePath );

NSLog( @"Data: %@", Data );
和改变:

NSString *Data = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil ];
当然,通过调试器运行此代码并检查返回值也会起作用,并让您确切地知道它失败的地方。

我设置了一个示例项目并尝试了此代码,它成功了

两个最可能的误差点是

您没有获取文件路径,即文件路径为零 您没有正确读取文件。 我建议加上:

NSLog( @"filePath: %@", filePath );

NSLog( @"Data: %@", Data );
和改变:

NSString *Data = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil ];
当然,通过调试器运行此操作并检查返回值也会起作用,并让您确切知道失败的位置。

请记录pathForResource:ofType:和stringWithContentsOfFile:encoding:error:的返回值,并编辑问题以包含输出。还请停止抑制该错误,将change error:nil返回到error:&nameofVariableYouCreateToHoldAnnsErrorObject并记录该对象,然后编辑问题以包含该输出。框架经常试图告诉你你做错了什么;当您将NULL或nil传递给错误返回时,您会阻止他们这样做。作为一个风格点,我可以建议data不是最有意义的变量名,并且具有两个不同的变量data和data是完全混淆的+1对于不要忽略错误返回,它可能试图告诉您一些事情调用字符串变量“data”本身就令人困惑,因为有一个NSData类,而我更可能将变量命名为“data”如果它包含NSData对象。请记录pathForResource:ofType:和stringWithContentsOfFile:encoding:error:的返回值,并编辑您的问题以包含输出。还请停止抑制该错误,将change error:nil返回到error:&nameofVariableYouCreateToHoldAnnsErrorObject并记录该对象,然后编辑问题以包含该输出。框架经常试图告诉你你做错了什么;当您将NULL或nil传递给错误返回时,您会阻止他们这样做。作为一个风格点,我可以建议data不是最有意义的变量名,并且具有两个不同的变量data和data是完全混淆的+1对于不要忽略错误返回,它可能试图告诉您一些事情调用字符串变量“data”本身就令人困惑,因为有一个NSData类,而我,作为其中之一,如果变量包含NSData对象,则更有可能将其命名为“data”。谢谢您的帮助!!!是的,我跟踪了数据文件的位置,确保找到了正确的路径。它起作用了!!谢谢你的帮助!!!是的,我跟踪了数据文件的位置,确保找到了正确的路径。它起作用了!! NSError* error; NSString* Data = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error ];
NSLog( @"error: %@", error );