【问题标题】:why is this not printing out a grocery list? NSMuteableArray For fast loop enumeration为什么这不打印出购物清单? NSMutableArray 用于快速循环枚举
【发布时间】:2016-07-17 08:36:16
【问题描述】:
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSMutableArray *groceries;
        NSString *a = (@"loaf of bread");
        NSString *b = (@"stick of butter");
        NSString *c = (@"big ass cookie");

        [groceries addObject:a];
        [groceries addObject:b];
        [groceries addObject:c];

        for (NSString *d in groceries){
            NSLog(@"%@", d);
        }
    }

    return 0;
}

为什么这不起作用?怎么了?谢谢。 我现在似乎无法弄清楚,for循环似乎是挂断。

【问题讨论】:

  • 杂货未初始化
  • groceries = [[NSMutableArray alloc] init];
  • 学习使用调试器并逐步执行此代码,查看每一步中每个变量的值。问题会变得很清楚。
  • 感谢调试器非常有用,我绝对需要熟悉它。

标签: objective-c for-loop nsstring nsmutablearray nsarray


【解决方案1】:

虽然您没有初始化 NSMutableArray,但它是 nil。将对象添加到未初始化的可变数组总是给出 nil。

首先你需要初始化杂货:

NSMutableArray *groceries = [NSMutableArray new];

或者更喜欢我的方式:

NSMutableArray *groceries = @[].mutableCopy;

例如,您可以这样声明:

NSMutableArray *groceries = @[@"loaf of bread", @"stick of butter", @"big ass cookie"].mutableCopy;

【讨论】:

  • 第二种方式你为什么使用文字符号@然后是空括号然后是句点和mutableCopy方法很困惑......你能进一步解释一下
  • [[NSArray alloc] init] 等于 [NSArray new]@[],[[NSMutableArray] alloc] init] 等于 [NSMutableArray new]@[].mutableCopy。同样[NSDictionary new] 等于@{}[NSMutableDictionary new] 等于@{}.mutableCopy
  • 只是更短的版本。
  • 在您的情况下,例如,您可以这样声明:NSMutableArray *groceries = @[@"loaf of bread", @"stick of butter", @"big ass cookie"].mutableCopy;
  • 哇伊戈尔有这么多不同的方法来获得相同的结果,它相当惊人也令人生畏
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-21
  • 1970-01-01
相关资源
最近更新 更多