【问题标题】:How to deal with booleans in NSMutableArrays?如何处理 NSMutableArrays 中的布尔值?
【发布时间】:2010-08-09 07:05:33
【问题描述】:

谁能告诉我为什么我的应用程序在这里崩溃?

为什么当我用 NSString 值替换 YES 对象时它不会崩溃?

我要做的就是将布尔数据存储到数组中,然后再修改这些数据, 有人可以告诉我该怎么做吗?

- (void)viewDidLoad {
    [super viewDidLoad];
    NSMutableArray* arr = [[NSMutableArray alloc] initWithObjects:YES, YES, YES, YES, nil];
    NSLog([arr objectAtIndex:1]);
}

【问题讨论】:

    标签: objective-c cocoa-touch nsmutablearray boolean


    【解决方案1】:

    YES 和 NO 是 BOOL,它不是一个 Objective-C 类。 Foundation 容器只能存储 Objective-C 对象。

    您需要将它们包装在一个 NSNumber 中,例如:

    NSNumber* yesObj = [NSNumber numberWithBool:YES];
    NSMutableArray* arr = [[NSMutableArray alloc] initWithObjects:
                                                   yesObj, yesObj, yesObj, yesObj, nil];
    NSLog(@"%d", [[arr objectAtIndex:1] boolValue]);
    

    之所以接受NSString,是因为NSStringObjective-C的一种类。

    【讨论】:

    • 要获取原始的BOOL值,可以使用BOOL b = [[array objectAtIndex:i] boolValue]
    • 感谢您的快速回复,我希望objective-c 具有Java 中的自动装箱/拆箱功能,无论如何objective-c 真的是一种痛苦的语言:S
    • @anasnakawa:Objective-C 在普通 C 之上是相当薄的一层,这也是大部分痛苦的来源。
    • @anasnakawa:我一开始也是这么想的,但在很多方面,Objective-C 比 Java 更接近真正的面向对象编程的精神。一旦习惯了这些怪癖,您可能会发现它会更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 1970-01-01
    • 2020-12-15
    相关资源
    最近更新 更多