【问题标题】:id to int conversion from NSMutableDictionary to NSArray从 NSMutableDictionary 到 NSArray 的 id 到 int 转换
【发布时间】:2014-08-01 16:06:14
【问题描述】:

我正在从 .plist 文件加载数字,其值为 0 或 1。

然后我将这些值加载到NSArray

那我希望能够做到

if([levelOkays[1] == 1){
    [play1 setTitle:@"Play" forState:UIControlStateNormal];
    [play1 setEnabled:true]; // To toggle enabled / disabled
}else{
    [play1 setTitle:@"Locked" forState:UIControlStateNormal];
    [play1 setEnabled:false]; // To toggle enabled / disabled
}

其中levelOkayNSArray。问题是,我不能执行== 1,因为数组中的值是 id 并且 1 是整数。如何从一种转换为另一种。

【问题讨论】:

    标签: ios objective-c nsarray nsmutabledictionary


    【解决方案1】:

    我会这样做,如果您的值在数组中确实是 01,那么看起来会更优雅。

    BOOL _isOkay = [levelOkays[1] boolValue];
    [play1 setTitle:(_isOkay ? @"Play" : @"Locked") forState:UIControlStateNormal];
    [play1 setEnabled:_isOkay];
    

    如果您根本不需要布尔值:

    [play1 setEnabled:[levelOkays[1] boolValue]];
    [play1 setTitle:(play1.isEnabled ? @"Play" : @"Locked") forState:UIControlStateNormal];
    

    【讨论】:

    • 干净,我喜欢这种做法
    【解决方案2】:

    您可能正在寻找intValue 方法:

    if (levelOkays[1].intValue == 1)
    

    或者如果它们真的只是布尔值,那么使用boolValue

    【讨论】:

      【解决方案3】:

      当您从 plist 加载 NSArray 时,plist 中的数字将加载为 NSNumbers。 (假设 plist 正确编码类型,<integer>

      您可以将数字与 int 进行比较,如下所示:

      if ([levelOkays[1] integerValue] == 1)
      

      【讨论】:

        猜你喜欢
        • 2013-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-07
        • 2014-12-04
        • 1970-01-01
        相关资源
        最近更新 更多