【问题标题】:Comparing various NSStrings to one nsstring将各种 NSString 与一个 nsstring 进行比较
【发布时间】:2016-02-16 03:36:51
【问题描述】:

我正在创建一种秒表应用程序。现在让它在后台“运行”,我在按下按钮时保存NSDate,并将其与用户返回时进行比较。

我现在的位置是使用一个弹出窗口,要求在计时器未运行时删除所有值。当按下计时器以指示运行与未运行时,计时器会将NSString 保存到NSUserDefaults。这是我尝试过的代码:

NSString *TS = [prefs objectForKey:@"Run"];
NSString *TS1 = [prefs objectForKey:@"Run1"];
NSString *TS2 = [prefs objectForKey:@"Run2"];
NSString *TS3 = [prefs objectForKey:@"Run3"];
NSString *TS4 = [prefs objectForKey:@"Run4"];
NSString *TS5 = [prefs objectForKey:@"Run5"];
NSString *TS6 = [prefs objectForKey:@"Run6"];
NSString *TS7 = [prefs objectForKey:@"Run7"];
NSString *TS8 = [prefs objectForKey:@"Run8"];
NSString *TS9 = [prefs objectForKey:@"Run9"];
NSString *TS10 = [prefs objectForKey:@"Run10"];
NSString *TS11 = [prefs objectForKey:@"Run11"];
NSString *TS12 = [prefs objectForKey:@"Run12"];
NSString *TS13 = [prefs objectForKey:@"Run13"];
NSString *TS14 = [prefs objectForKey:@"Run14"];
NSString *TS15 = [prefs objectForKey:@"Run15"];
NSString *TS16 = [prefs objectForKey:@"Run16"];
NSString *TS17 = [prefs objectForKey:@"Run17"];
//   NSString *TS18 = [prefs objectForKey:@"Run18"];


if  ([TS   isEqual: @"NotRunning"] | [TS1   isEqual: @"NotRunning"] |[TS2   isEqual: @"NotRunning"] |[TS3   isEqual: @"NotRunning"] | [TS4   isEqual: @"NotRunning"] |[TS5   isEqual: @"NotRunning"] | [TS6   isEqual: @"NotRunning"] | [TS7   isEqual: @"NotRunning"] | [TS8   isEqual: @"NotRunning"] | [TS9   isEqual: @"NotRunning"] | [TS10   isEqual: @"NotRunning"] |[TS11   isEqual: @"NotRunning"] | [TS12   isEqual: @"NotRunning"] | [TS13   isEqual: @"NotRunning"] |[TS14   isEqual: @"NotRunning"]|[TS15   isEqual: @"NotRunning"]|[TS16   isEqual: @"NotRunning"]|[TS17   isEqual: @"NotRunning"])
{
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:NSLocalizedString(@"Would you like to clear everything?",@"") message:nil delegate:self cancelButtonTitle:NSLocalizedString(@"NO",@"") otherButtonTitles:NSLocalizedString(@"YES",@""), nil];
    alert.alertViewStyle = UIAlertViewStyleDefault;
    alert.tag = 99;

    [alert show];
}

非常感谢任何帮助!所以提前谢谢:)

【问题讨论】:

  • 把它们放在一个 NSArray 中,然后你可以循环它来决定是否显示警报。
  • 感谢您的建议。我需要让所有这些都等于不运行以显示警报,如果其中一个不等于不运行,则不显示警报。如果这有任何意义@Larme
  • @user3775028 我已经调整了对您最新评论的回答。如果答案无效,请记得提供反馈,如果有效,请将您的问题标记为已解决。

标签: objective-c nsstring


【解决方案1】:
BOOL allNotRunning = YES;
for(int index = 1;index < 19; index++){
    NSString *key = index == 1 ? "Run" : [NSString stringWithFormat:"Run%d", index];
    if(![[prefs objectForKey:key] isEqualToString:@"NotRunning"]){allNotRunning = NO;}
}

if(allNotRunning){
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:NSLocalizedString(@"Would you like to clear everything?",@"") message:nil delegate:self cancelButtonTitle:NSLocalizedString(@"NO",@"") otherButtonTitles:NSLocalizedString(@"YES",@""), nil];
    alert.alertViewStyle = UIAlertViewStyleDefault;
    alert.tag = 99;

    [alert show];
}

【讨论】:

  • allNotRunning 应该命名为allRunning
  • 计算allNotRunning 标志的循环是无稽之谈:您正在测试集合中的每个元素是否等于一个特定值 - 但构建集合是为了有效查找一个特定值。可以高效简洁地计算标志:allRunning = [stringSet member:@"NotRunning"] == nil;
  • 第一个循环计算条件的时候根本不需要set。
  • 谢谢尼古拉。你完全正确。再三考虑我会使用allRunning = [stringSet containsObject:@"NotRunning"],这样我就可以删除 == nil 检查。我会更正我的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
  • 2011-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多