You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在for循环中设置UserDefaults标记失效问题排查

问题分析与修复方案

你的代码中hide始终为YES的核心原因是循环中hide的赋值逻辑被反复覆盖:

当前逻辑是每遇到一个不是「CASE OF COUNT」的Rating,就将hide设为YES;只有遇到匹配的Rating时,才将hide设为NO。这会导致如果数组中既有匹配的Rating,又有不匹配的Rating,且最后一个元素是不匹配的,hide会被最后一次赋值为YES,覆盖之前找到匹配时设置的NO,完全违背了“检测是否存在,不存在则标记hide=YES”的需求。

修复后的代码

- (NSMutableArray *) removeCaseOfCount:(NSArray *) ratings {
    NSMutableArray *ratingsLocal = [[NSMutableArray alloc] init];
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    
    // 初始默认:不存在「CASE OF COUNT」,hide设为YES
    BOOL hide = YES;
    // 可选:避免重复赋值enterdByuser,初始设为0
    self.enterdByuser = 0;
    
    for (Rating *rating in ratings) {
        NSLog(@"rating names %@",rating.name);
        if ([[Audt sharedInspection] checkOD]) {
            if (![[rating.od uppercaseString] isEqualToString:ODCases]) {
                [ratingsLocal addObject:rating];
            } else {
                self.currentAudit.countOfCasesRatingPresent = YES;
                int cCasesFromAnswer = [rating.ratingAnswerFromUI integerValue];
                self.cCEnteredByTheUser = cCasesFromAnswer;
                [ratingsLocal addObject:rating];
            }
        } else {
            if([rating.name compare:@"CASE OF COUNT" options:NSCaseInsensitiveSearch] == NSOrderedSame) {
                // 找到目标Rating,标记存在,hide设为NO
                hide = NO;
                self.ca.Present = YES;
                [ratingsLocal addObject:rating];
            } else {
                // 非目标Rating,hide保持当前状态(不修改)
                if (self.enterdByuser == 0) {
                    // 仅第一次遇到非目标时赋值,避免重复操作
                    self.enterdByuser = 1;
                }
                [ratingsLocal addObject:rating];
            }
        }
    }
    
    [userDefaults setBool:hide forKey:@"cCountIsEmpty"];
    // 可选:确保NSUserDefaults立即同步
    [userDefaults synchronize];
    return ratingsLocal;
}

关键修改点

  • 初始化逻辑调整:默认hide=YES(假设不存在目标Rating),只有找到匹配项时才改为NO
  • 避免覆盖赋值:非目标Rating不再修改hide的值,确保一旦找到匹配项,hide就保持为NO
  • 优化enterdByuser赋值:仅第一次遇到非目标Rating时赋值,避免循环中重复操作(原逻辑也能工作,但更高效)
  • 添加NSUserDefaults同步:确保设置立即写入,避免数据延迟

内容的提问来源于stack exchange,提问作者e.T55

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 17:40:54