我制作的应用程序将用于科学数据收集。它通过用户界面收集数据,将其保存为.csv,然后通过电子邮件将该文件读取并发送到预定的收集邮件。它在模拟器中完美运行,但是当我在设备上测试时,代码只返回null。 我也不知道如何检查首先保存在设备上的文件。我确实意识到文件可能不是因为它不在那里而被阅读。
以下是读取文件的代码:
{
NSLog(@"readFile");
NSString *appFile = fileData;
NSFileManager *fileManager=[NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:appFile])
{
NSLog(@"found file");
NSError *error= NULL;
NSString *resultData = [NSString stringWithContentsOfFile:appFile encoding: NSUTF8StringEncoding error: &error];
if (error == NULL)
NSLog(@"No errors in reading");
return resultData;
}
return NULL;
}
与嵌入在Button中的调用一起使用:
- (IBAction)sendData:(UIButton *)sender {
// reading the data:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *strHelp = [self readFile:[documentsDirectory stringByAppendingPathComponent:@"ObservationalData.csv"]];
NSData *observationalData = [strHelp dataUsingEncoding:NSUTF8StringEncoding ];
NSLog(@"Data: %@", strHelp);
...
}
以下代码块用于保存数据:
- (IBAction)sendingData:(UIBarButtonItem *)sender {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSError *error = nil;
[_csvCollection writeToFile:[documentsDirectory stringByAppendingPathComponent:@"ObservationalData.csv"]
atomically:YES encoding:NSUTF8StringEncoding error:&error];
NSLog(@"Data Saved");
}
此按钮也会切换到视图控制器,用户可以在其中更改目标电子邮件。
无论如何,当我在我的设备上运行它时会出现以下错误:
2015-08-21 15:53:07.814 DistenceBasedObservations[5701:1553004] readFile
2015-08-21 15:53:07.815 DistenceBasedObservations[5701:1553004] Data: (null)
2015-08-21 15:53:07.817 DistenceBasedObservations[5701:1553004] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSCFString stringByAppendingString:]: nil argument'
*** First throw call stack:
(0x275b6137 0x35a2fc77 0x275b607d 0x2822ee23 0xa9481 0x2ac21a7b 0x2ac21a21 0x2ac0c5c5 0x2ac21461 0x2ac21133 0x2ac1aa41 0x2abf0c05 0x2ae6731f 0x2abef607 0x2757c22f 0x2757b643 0x27579cc1 0x274c59a1 0x274c57b3 0x2ec841a9 0x2ac50695 0xaedc9 0x35fd7aaf)
libc++abi.dylib: terminating with uncaught exception of type NSException
Message from debugger: failed to send the k packet
终止发生是因为我将应该包含数据的字符串附加到消息正文。当然,没有字符串。
这是我在模拟器上运行应用程序时的日志输出示例:
2015-08-21 16:44:54.512 DistenceBasedObservations[11827:276484] message >Body: Data are coming from:Left observer, start observing time is:(null), and set max distance: 200.
2015-08-21 16:44:58.937 DistenceBasedObservations[11827:276484] readFile
2015-08-21 16:44:58.982 DistenceBasedObservations[11827:276484] found file
2015-08-21 16:44:59.002 DistenceBasedObservations[11827:276484] No errors in reading
2015-08-21 16:44:59.002 DistenceBasedObservations[11827:276484] Data: time,observer,lat,long,doe,fawn,buck,distance
2015-08-07 23:51:02 +0000,Right,37.48859,-122.2984,3,1,1,183
2015-08-19 21:11:40 +0000,Front,37.33428,-122.0787,3,3,1,243
2015-08-19 21:12:01 +0000,Front,37.33862,-122.0855,3,1,1,214
2015-08-21 16:45:09.020 DistenceBasedObservations[11827:276484] Mail sent
这就是我认为该文件可能不会首先保存在设备上的原因。变量_csvCollection正确形成,日志输出确认,但我不知道如何检查是设备中的文件。也不是为什么它不保存文件(如果文件没有保存)。设备上有18个演出,因此空间不应成为问题。
提前感谢任何提示。
答案 0 :(得分:0)
再次感谢rmaddy和zaph的评论!
你告诉我正确的道路。
我将保存数据的代码放入
,这是错误的-(IBAction)...
,当我把它移到
-(void)prepareForSegue...
它充当了魅力。这就是修复。
再次感谢您的评论。