为什么为Google云端硬盘文件设置modifiedDate会导致iOS Drive api崩溃?

时间:2014-09-20 06:19:30

标签: ios objective-c google-drive-api

执行以下操作将本地文件上传到Google云端硬盘会导致崩溃。

GTLDriveFile *gFile = [GTLDriveFile object];
gFile.title = "MyFileName.txt";

// Other file setup

NSDate *myLocalDate = [self fileDate:myPath];
gFile.modifiedDate  = [GTLDateTime dateTimeWithDate:myLocalDate timeZone:gmtZone];

// Other GTLQueryDrive and GTLUploadParameters calls

query.setModifiedDate = YES;
[service executeQuery:query completionHandler: (etc)

fileDate:path方法返回正在上载的本地文件的fileModificationDate属性。崩溃消息是:

错误Domain = com.google.GTLJSONRPCErrorDomain Code = 400"无法完成操作。 (无效值:无效格式:" 2014-09-14T13:21:58 + 00:00和#34;格式错误

1 个答案:

答案 0 :(得分:1)

我最近发现了如何在stackoverflow问题14193307中发布的如何正确设置Google Drive文件的modifiedDate。然后我遇到了上面显示的问题,发现崩溃可能是Google Drive SDK中的一个错误。我成功的工作是在我的fileDate:path方法中添加另一行,如下所示:

- (NSDate *)fileDate:(NSString *)path {
    NSDictionary *attributes = [fMgr attributesOfItemAtPath:path error:nil];
    long long t = [attributes.fileModificationDate timeIntervalSince1970];
    return [NSDate dateWithTimeIntervalSince1970:t+.1];
}

当Google Drive SDK将其内部日期转换为JSON字符串时,如果xxx = 0,它似乎会丢弃.xxx毫秒部分。因此,上面的不优雅代码强制.xxx为.100,以便modifiedDate字符串变为例如。 {2014-09-20T05:58:37.100 + 00:00}这是有效的。