找不到CSV文件?

时间:2014-08-28 14:28:55

标签: ios objective-c cocoa-touch csv

我正在尝试构建一个应用程序,该应用程序将文本填充数据保存为CSV文件,然后可以在以后通过电子邮件发送。 我已经在线阅读了一些教程,并提出了一个可行的应用程序,但有一些问题(请参阅下面的编码)。

在视图中.m

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
@synthesize first;
@synthesize seconds;
@synthesize tel;
@synthesize resultview;

- (IBAction)retractkeyboard:(id)sender{
    [self resignFirstResponder];
}

-(IBAction)saveinfo:(id)sender{
    NSString *resultLine=[NSString stringWithFormat:@"%@,%@,%@\n",
                          self.first.text,
                          self.seconds.text,
                          self.tel.text];
    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES)objectAtIndex:0];
    //resultview.text = docPath;
    NSString *surveys=[docPath stringByAppendingPathComponent:@"results.csv"];

    if (![[NSFileManager defaultManager] fileExistsAtPath:surveys]) {
        [[NSFileManager defaultManager]
         createFileAtPath:surveys contents:nil attributes:nil];
    }
    NSFileHandle *filehandle = [NSFileHandle fileHandleForUpdatingAtPath:surveys];
    [filehandle seekToEndOfFile];
    [filehandle writeData:[resultLine dataUsingEncoding:NSUTF8StringEncoding]];
    [filehandle closeFile];
    self.first.text=@"";
    self.seconds.text=@"";
    self.tel.text=@"";
    NSLog(@"info saved");
}

-(IBAction)retrieveinfo:(id)sender{
    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES)objectAtIndex:0];
    //resultview.text = docPath;
    NSString *surveys=[docPath stringByAppendingPathComponent:@"results.csv"];

    if([[NSFileManager defaultManager] fileExistsAtPath: surveys])
    {
        NSFileHandle *filehandle = [NSFileHandle fileHandleForReadingAtPath:surveys];
        NSString *surveyresults=[[NSString alloc] initWithData:[filehandle availableData] encoding:NSUTF8StringEncoding];
        [filehandle closeFile];
        self.resultview.text=surveyresults;
}
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

在视图中.h:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
@property (strong, nonatomic) IBOutlet UITextField *first;
@property (strong, nonatomic) IBOutlet UITextField *seconds;
@property (strong, nonatomic) IBOutlet UITextField *tel;
-(IBAction)saveinfo:(id)sender;
-(IBAction)retrieveinfo:(id)sender;
-(IBAction)retractkeyboard:(id)sender;
@property (strong, nonatomic) IBOutlet UITextView *resultview;

@end

我的问题是:该应用告诉我数据已保存到.csv文件中,但我似乎无法在任何地方找到它? (我甚至已经进入了mac的库文件夹等,但除了文件之外还找到了其他所有内容)我知道它保存它但不知道在哪里!加载功能也不起作用,但我觉得这是因为它不能加载文件,因为它不存在。有什么帮助吗?

3 个答案:

答案 0 :(得分:0)

您是否通过模拟器在Mac上运行此功能?你说它是iOS。如果您在Sim上运行,您将在〜/ Library / Application Support / iPhone Simulator / X.X / Applications / XXX /

中找到这些文件

XX是在SIM卡上运行的iOS版本,而XXX是用于放置文件的一些哈希值(您必须查看文件夹才能找到您的应用。< / p>

答案 1 :(得分:0)

如果您使用手机看看:

How do I export text from iOS application to desktop PC?

在plist中你必须添加一个属性: 应用程序支持iTunes文件共享

然后您可以从iTunes查看该文件。

答案 2 :(得分:0)

输入一些NSLog语句,以确切了解文件的位置:

NSLog(@"surveys path: %@", surveys);

这是错误:

Incorrect: `NSDocumentationDirectory`   
Correct:   `NSDocumentDirectory`   

surveys对于文件路径来说是一个可怕的名称,会引起混淆,像surveysPath这样会更好。

您可以使用调试器添加断点,跟踪执行并检查变量的值。调试是学习和熟练的必要技能 - 除非你能在100%的时间内第一次编写正确的代码。

提示:最佳实践是DRY(不要重复自己),创建一个返回路径的方法,将文件名作为参数。当然它只有几行,但只有一个地方可以更新。

示例代码:

- (NSString *)documentPathForFileName:(NSString *)fileName {
    NSString *documentFolderPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
    NSString *filePath = [documentFolderPath stringByAppendingPathComponent:fileName];
    return filePath;
}