我创建了一个从Amazon S3下载plist文件的应用程序。我在AFAmazonS3Client框架中使用AFNetworking客户端。
-(void) getFile:(NSString *)fileName{
self.s3Manager = [[AFAmazonS3Manager alloc] initWithAccessKeyID:@"..." secret:@"..."];
self.s3Manager.requestSerializer.region = AFAmazonS3SAEast1Region;
self.s3Manager.requestSerializer.bucket = @"verba";
NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
documentsPath = [documentsPath stringByAppendingPathComponent:fileName];
NSOutputStream *stream = [[NSOutputStream alloc] initToFileAtPath:documentsPath append:NO];
[self.s3Manager getObjectWithPath:@""
outputStream:stream
progress:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {
NSLog(@"%f%% Downloaded", (totalBytesRead / (totalBytesExpectedToRead * 1.0f) * 100));
} success:^(id responseObject) {
NSLog(@"Download Complete");
} failure:^(NSError *error) {
NSLog(@"Error: %@", error);
}];
}
然后我检查了plist文件是否在文件夹中。它就是。所以我试图打开plist文件,结果是nil:
-(NSString*) loadListName:(NSString*)fileName{
NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString* filePath = [documentsPath stringByAppendingPathComponent:fileName];
NSDictionary *temp;
if ([[NSFileManager defaultManager] fileExistsAtPath: filePath]){
temp = [NSDictionary dictionaryWithContentsOfFile:filePath];
} else {
NSLog(@"File not found.");
}
NSString *listName = [temp objectForKey:@"name"];
return listName;
}
所以我尝试手动添加plist文件。我下载并将其复制到文档文件夹,然后dictionaryWithContentsOfFile
可以打开该文件。因此,当我使用AFAmazonS3Client下载文件时,我认为plist文件已损坏。
我做错了什么?
更新1
我意识到我从S3下载的每个文件都已损坏。我不知道我是以正确的方式处理NSOutputStream还是其他东西。
答案 0 :(得分:2)
由于某些原因,来自getObjectWithPath
的{{1}}方法无效。
所以我直接从AFNetworking
使用AFAmazonS3Manager
重写我的方法
AFHTTPRequestOperation
答案 1 :(得分:-1)
在Xcode的最后一个版本中要小心,每次在模拟器中重启你的应用程序时,文件夹都会被删除