Dropboxからファイルのリビジョンステータスをダウンロードしています。基本的に、Dropboxでダウンロードしたリビジョン番号をローカルplistのリビジョン番号と比較します。
それらを比較した後、ローカルリビジョン番号をDropboxのリビジョン番号に変更したいと思います。しかし、それは機能していません。私は心を失いかけています。
いくつかのフラグとNSlogを配置すると、値が置き換えられたようですが、同じ関数を呼び出すか、アプリを再度起動した後、値が置き換えられていないことがわかります。同じ出力を何度も繰り返します
NSString* revisionLocal = [dicInner objectForKey:@"revision"];
NSString* statusLocal = [dicInner objectForKey:@"status"];
NSLog(@"revision value before %@",revisionLocal);
NSLog(@"status value before %@",statusLocal);
//If revision has changed on dropbox, flag it as outdated on the local revision
if(![revisionLocal isEqualToString: dropBoxRevision] ){
[dicInner setValue:@"outdated" forKey:@"status"];
//But the revision is the latest
[dicInner setValue:dropBoxRevision forKey:@"revision"];
//[dicInner setValue:@"outdated" forKey:@"revision"];
NSLog(@"revision value %@",[dicInner objectForKey:@"revision"]);
NSLog(@"status value %@",[dicInner objectForKey:@"status"]);
だからこれは私に次の出力を与えます:
revision value before 4309efbbb7
status value before updated
revision value 4409efbbb7
status value outdated
そして、完全なコードは次のとおりです。
- (void)restClient:(DBRestClient *)client loadedMetadata:(DBMetadata *)metadata {
//get the local revision
NSDictionary * localRevisionDic = [FileUtils readPlistIntoDictionary:@"revision.plist"];
NSString *fileRevString = [NSString alloc];
//get the revision from Dropbox
//NSString * dropboxRevision;
if (metadata.isDirectory) {
NSLog(@"Folder '%@' contains:", metadata.path);
for (DBMetadata *file in metadata.contents) {
NSLog(@"\t%@", file.filename);
//NSLog(@"\t%@", file.lastModifiedDate);
NSLog(@"\t%@", file.rev );
//Assign dropbox revision for this file
//dropboxRevision = file.rev;
//if no local revision.plist, entry will be added. Hence init here
if (localRevisionDic==nil){
localRevisionDic = [[NSMutableDictionary alloc]init];
}
//Otherwise go through each from dropbox and campare with local
//From Dropbox
NSString * dropBoxFileName = file.filename;
NSString * dropBoxRevision = file.rev;
fileRevString = file.rev;
//if no local revision.plist entry is added for all other files
//with status need_downloaded, and no revision
if ([localRevisionDic count]==0){
//Creating revision dictionary entry for agenda.plist
NSDictionary * localRevisionDicDic = [[NSMutableDictionary alloc]init];
//when agenda.plist revision entry is added update the revision while leaving status as "new" before downloading
//will be updated accordingly if download fails
[localRevisionDicDic setValue:@"new" forKey:@"status"];
//Status is new but the revision is the latest
[localRevisionDicDic setValue:dropBoxRevision forKey:@"revision"];
[localRevisionDic setValue:localRevisionDicDic forKey:dropBoxFileName];
}else{//If there is local revision.plist compare and update accordingly
NSDictionary * dicInner = [localRevisionDic objectForKey:dropBoxFileName];
//File name Found locally
if (dicInner!=nil){
NSString* revisionLocal = [dicInner objectForKey:@"revision"];
NSString* statusLocal = [dicInner objectForKey:@"status"];
NSLog(@"revision value before %@",revisionLocal);
NSLog(@"status value before %@",statusLocal);
//If revision has changed on dropbox, flag it as outdated on the local revision
if(![revisionLocal isEqualToString: dropBoxRevision] ){
[dicInner setValue:@"outdated" forKey:@"status"];
//But the revision is the latest
[dicInner setValue:dropBoxRevision forKey:@"revision"];
//[dicInner setValue:@"outdated" forKey:@"revision"];
NSLog(@"revision value %@",[dicInner objectForKey:@"revision"]);
NSLog(@"status value %@",[dicInner objectForKey:@"status"]);
}
}else{//File name not found locally newly added on dropbox
NSDictionary * localRevisionDicDic = [[NSMutableDictionary alloc]init];
//when agenda.plist revision entry is added update the revision while leaving status as "new" before downloading
//will be updated accordingly if download fails
[localRevisionDicDic setValue:@"new" forKey:@"status"];
//But the revision is the latest
[localRevisionDicDic setValue:dropBoxRevision forKey:@"revision"];
[localRevisionDic setValue:localRevisionDicDic forKey:dropBoxFileName];
}
}
}
}
//At this point agendaRevisionDicTemp contains all the files in dropbox entered/updated.
[[self agenda] setRevision:localRevisionDic];
//*****The following block is needed to determine is new agenda is needed or not.
BOOL newAgendaNeeded = false;
NSMutableDictionary * agendaRevisionDicLocal = [localRevisionDic objectForKey:@"agenda.plist"];
//NSString * localRevision = [agendaRevisionDicLocal objectForKey:@"revision"]; //what is this value?
NSString * localStatus = [agendaRevisionDicLocal objectForKey:@"status"];
NSLog(@"Local Status= %@",agendaRevisionDicLocal);
if ([localStatus isEqualToString:@"new"] ||[localStatus isEqualToString:@"outdated"]){
newAgendaNeeded = true;
//when agenda.plist is added update the revision while leaving status as "new" before downloading
//will be updated accordingly if download fails
NSDictionary * agendaDic = [[[self agenda]revision] objectForKey:@"agenda.plist"];
[agendaDic setValue:@"updated" forKey:@"status"];
NSLog(@"agendaDic where update %@",agendaDic);
}
//*****The above block is needed to determine is new agenda is needed or not.
//If new agenda is needed download
if (newAgendaNeeded){
//Download agenda.plist
NSString *documentsDirectory = FileUtils.getDocumentsDirectory;
[[self restClient] loadFile:@"/agenda.plist" intoPath: [ NSString stringWithFormat:@"%@/%@",documentsDirectory,@"agenda.plist"] ];
} else{//Else display the scene
[self populateSceneFromAgenda];
}
[restOfView reloadData];
// Add at start of requestFinished AND requestFailed
[MBProgressHUD hideHUDForView:self.view animated:YES];
}
任意のアイデアその値をどのように置き換えることができますか?