I am downloading a file revision status from Dropbox and basically I compare downloaded revison number in Dropbox with revision number in my local plist.
After comparing them I want to change local revision number with Dropbox’s revision number. But it is not working I am about to loss my mind.
I put some flags and NSlogs it seems it replace the value but after I call same function or launch the app again I see that value is not replaced. It gives the same output over and over again
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"]);
so this give me the output of:
revision value before 4309efbbb7
status value before updated
revision value 4409efbbb7
status value outdated
And the full code is:
- (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];
}
Any Idea How Can I replace that value?
I guess your dictionary changes correctly whats wrong with your code should be that you do not save your dictionary to the plist you edit
In fact there is deffinetly something wrong with that method
[[self agenda] setRevision:localRevisionDic];Try to add following code below from
[[self agenda] setRevision:localRevisionDic];