iOS:在后台应用时写入文件

时间:2014-03-30 01:03:27

标签: ios iphone ios7

我正在尝试将加速度计数据记录到iPhone上的txt文件中。我让它工作得很好,启用了后台应用程序模式,还使用了位置服务来保持CoreMotion在后台运行。

我的问题是当应用在后台时没有写入文件。

甚至可能吗?我在iPhone 5上使用iOS 7。

更新:以下是我的代码。

- (void)writeToFile:(NSString*)line sensor:(NSString*)sensorType {

    // current date
    NSDate *currentDate = [[NSDate alloc] init];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
    [dateFormatter setDateFormat:@"yyyyMMdd"]; //"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
    NSString *localDateString = [dateFormatter stringFromDate:currentDate];

    // storage path and file name
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDir = [paths lastObject]; //objectAtIndex:0 (iOS 2+)
    NSString *fileDir = [documentsDir stringByAppendingPathComponent:localDateString];
    NSString *fileName = [NSString stringWithFormat:@"%@_%@.txt", sensorType, localDateString];
    NSString *filePath = [fileDir stringByAppendingPathComponent:fileName];

    NSFileManager *fileManager = [NSFileManager defaultManager];
    // create folder if not exists
    if(![fileManager fileExistsAtPath:fileDir]) {
        [fileManager createDirectoryAtPath:fileDir withIntermediateDirectories:NO attributes:nil error:nil];
    }
    // create file or append to file
    if(![fileManager fileExistsAtPath:filePath])
    {
        [line writeToFile:filePath atomically:YES encoding:NSASCIIStringEncoding error:nil];
    }
    else
    {
        NSFileHandle *myHandle = [NSFileHandle fileHandleForWritingAtPath:filePath];
        [myHandle seekToEndOfFile];
        [myHandle writeData:[line dataUsingEncoding:NSASCIIStringEncoding]];
    }
}

感谢。

1 个答案:

答案 0 :(得分:1)

没关系,让它运转起来。我想我需要的只是晚餐来重振我的大脑。我所做的是将我的- (void)applicationDidEnterBackground:(UIApplication *)application代码块移到AppDelegate.m,不知怎的,我把它放在ViewController.m

感谢所有建议和意见。