gpt4 book ai didi

objective-c - 无法更改/替换 NSDictionary 键值 IOS

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:19:28 25 4
gpt4 key购买 nike

我正在从 Dropbox 下载文件修订状态,基本上我将 Dropbox 中下载的修订号与本地 plist 中的修订号进行比较。

比较它们后,我想用 Dropbox 的修订号更改本地修订号。但它不起作用,我快要失去理智了。

我放置了一些标志和 NSlogs,它似乎替换了值,但在我调用相同的函数或再次启动应用程序后,我看到该值没有被替换。它一遍又一遍地给出相同的输出

    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];
}

知道如何替换该值吗?

最佳答案

您不尊重 NSDictionary 对象的不变性。您将 localRevisionDic 声明为 NSDictionary*,但稍后可以为其分配 NSMutableDictionary 的值。 localRevisionDicDic 声明为 NSDictionary* 但初始化为 NSMutableDictionary 的值。以下两个赋值应该在编译时被警告。在行

[localRevisionDic setValue:localRevisionDicDic forKey:dropBoxFileName];

谁能确定 localRevisionDic 是可变的还是不可变的?
然后,您再次将 dicInner 声明为 NSDictionary*,但稍后尝试设置 Value 两次。首先制作字典的可变副本。

关于objective-c - 无法更改/替换 NSDictionary 键值 IOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12695027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com