【发布时间】:2018-03-09 07:59:19
【问题描述】:
我正在开发一个使用CLLocationManager 来保存GPX 轨道的应用程序。此外,我会在*.csv 文件上写下调试位置,但不幸的是,该文件只会在录制会话的开始和结束时写入。我猜是因为应用程序在前台,而用户开始和停止录制,其余时间在后台。
调用写入文件的代码:
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
for (CLLocation *location in locations) {
if (isDebug || ([location verticalAccuracy] >= 0 && [location horizontalAccuracy] >= 0))
{
dispatch_async(dispatch_get_main_queue(), ^{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"];
NSString *dateString = [formatter stringFromDate:location.timestamp];
[Utils writeCompleteGPSWithActivityID:_currentActivity.uniqueIdentifier status:[NSString stringWithFormat:@"%@,%f,%f,%f,%f,%f,%f,%f,0,0\n", dateString, location.coordinate.latitude, location.coordinate.longitude,location.altitude, location.speed, location.course, location.horizontalAccuracy, location.verticalAccuracy]];
});
}
}
}
写一些CSV文件的方法:
+ (void)writeCompleteGPSWithActivityID:(NSString *)activityID status:(NSString *)status
{
NSString *fileName = [NSString stringWithFormat:@"/%@_ios_completed.csv", activityID];
NSString *filePath = [[Utils getGPXDirectory] stringByAppendingString:fileName];
if (fileName == nil)
return;
if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]){
[Utils createCompleteGPSFile:activityID];
}
NSFileHandle *fileHandler = [NSFileHandle fileHandleForUpdatingAtPath:filePath];
[fileHandler seekToEndOfFile];
[fileHandler writeData:[status dataUsingEncoding:NSUTF8StringEncoding]];
[fileHandler closeFile];
}
【问题讨论】:
-
您在 Xcode 控制台上遇到了什么样的错误?您的 CSV 代码看起来不错...
-
我在控制台上没有错误。只是在记录我的 CSV 文件后只有开始和一些结束的记录,我认为在前台应用程序的时间段
标签: ios objective-c iphone csv nsfilemanager