user3800109
user3800109

Reputation: 1

Error reading csv file on iOS device

I created an app to save as an csv file, app works fine in iOS simulator with both write and read. When i load the app to iOS device it doesn't data.

- (IBAction)saveInfo:(id)sender {
    NSString *resultLine = [NSString stringWithFormat:@"%@,%@,%@\n",
                            self.food.text,
                            self.movies.text,
                            self.channel.text];
    NSArray *path= NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docPath = [path objectAtIndex:0];
    //resultView.text = docPath;

    NSString *filename = [docPath stringByAppendingString:@"result.csv"];
    resultView.text = filename;

    if (![[NSFileManager defaultManager] fileExistsAtPath:filename])
    {
        [[NSFileManager defaultManager] createFileAtPath:filename contents:nil attributes:nil];
    }
    NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:filename];
    [fileHandle seekToEndOfFile];
    [fileHandle writeData:[resultLine dataUsingEncoding:NSUTF8StringEncoding]];
    [fileHandle closeFile];
    self.food.text = nil;
    self.movies.text = nil;
    self.channel.text =nil;
    NSLog(@"Info saved");


}


- (IBAction)viewInfo:(id)sender {
    NSArray *path= NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docPath = [path objectAtIndex:0];
    NSString *filename = [docPath stringByAppendingString:@"result.csv"];

    NSString *fileContent=[NSString stringWithContentsOfFile:filename encoding:NSUTF8StringEncoding error:nil];

    resultView.text = fileContent;

}

Upvotes: 0

Views: 227

Answers (2)

Divyesh Gondaliya
Divyesh Gondaliya

Reputation: 904

On Button action u can write below code maybe File will be displayed in my point of view its running correctly you should tray.....

NSFileManager *filemgr;
NSString *dataFile;
NSString *docsDir;
NSArray *dirPaths;

filemgr = [NSFileManager defaultManager];

dirPaths = NSSearchPathForDirectoriesInDomains(
                                               NSDocumentDirectory, NSUserDomainMask, YES);

docsDir = [dirPaths objectAtIndex:0];
dataFile = [docsDir
            stringByAppendingPathComponent: @"datafile.csv"];
NSLog(@"%@",dataFile);
NSData *data = [filemgr contentsAtPath:dataFile];
NSString *fooString=@"----------------\n Full File Data \n ---------------- \n " ;
fooString = [fooString stringByAppendingString:[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] ];
self.FileTextView.text=fooString;

Upvotes: 0

rmaddy
rmaddy

Reputation: 318904

You are building the path incorrectly. Use:

NSArray *path= NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docPath = [path objectAtIndex:0];
NSString *filename = [docPath stringByAppendinPathComponent:@"result.csv"];

The code you have results in a path like <path to app bundle>/Documentsresult.csv and on the device you can't write to the app bundle.

Upvotes: 1

Related Questions