枚举包含字典的数组会产生意外的输出

时间:2009-07-02 00:04:48

标签: objective-c nsarray nsdictionary enumeration

我的问题是为什么它会输出日志中的最后4行(见下文)......这些对象是早先在日志和日志中打印的字典的一部分。不应该位于数组的末尾?我在这里缺少一些基本的东西... thx

NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:
    [NSURL URLWithString: @"www.stanford.edu"], 
    @"Stanford University", 
    [NSURL URLWithString: @"www.apple.com"], 
    @"Apple shop", 
    [NSURL URLWithString: @"cs193p.stanford.edu"], 
    @"CS193P course", 
    [NSURL URLWithString: @"itunes.stanford.edu"], 
    @"Stanford on iTunes U", 
    [NSURL URLWithString: @"stanfordshop.com"], 
    @"Stanford Mall", 
    nil];

NSMutableArray *myArray = [NSMutableArray arrayWithObjects:
    [NSString init],
    [NSURL URLWithString: @"www.stanford.edu"],
    [NSProcessInfo processInfo],
    dictionary,
    [@"Mutable string example" mutableCopy],
    [@"another mutable string" mutableCopy]];

NSEnumerator *enumerator = [myArray objectEnumerator];
id object;

while ((object = [enumerator nextObject])) {
    NSLog([object description]);
}

2009-07-02 09:35:12.756 WhatATool [6407:10b] NSString
2009-07-02 09:35:12.756 WhatATool [6407:10b] www.stanford.edu
2009-07-02 09:35:12.757 WhatATool [6407:10b] <NSProcessInfo: 0x107e20&gt;
2009-07-02 09:35:12.758 WhatATool [6407:10b] {
    “Apple shop”= www.apple.com;
    “CS193P课程”= cs193p.stanford.edu;
    “斯坦福购物中心”= stanfordshop.com;
    “斯坦福大学”= www.stanford.edu;
    “斯坦福在iTunes U上”= itunes.stanford.edu;
}
2009-07-02 09:35:12.758 WhatATool [6407:10b]可变字符串示例
2009-07-02 09:35:12.759 WhatATool [6407:10b]另一个可变的字符串
2009-07-02 09:35:12.760 WhatATool [6407:10b] itunes.stanford.edu
2009-07-02 09:35:12.760 WhatATool [6407:10b] Stanford在iTunes U上 2009-07-02 09:35:12.761 WhatATool [6407:10b] stanfordshop.com
2009-07-02 09:35:12.762 WhatATool [6407:10b]斯坦福购物中心

2 个答案:

答案 0 :(得分:24)

当你使用方法创建NSMutableArray时,我认为你缺少必要的nil作为最后一个参数。确实

NSMutableArray *myArray = [NSMutableArray arrayWithObjects:
    [NSString init],
    [NSURL URLWithString: @"www.stanford.edu"],
    [NSProcessInfo processInfo],
    dictionary,
    [@"Mutable string example" mutableCopy],
    [@"another mutable string" mutableCopy],
    nil];

工作?

答案 1 :(得分:4)

打开警告(其他警告标志“-Wall”),您将获得:

警告:函数调用中缺少sentinel

在NSMutableArray arrayWithObjects方法的末尾告诉你缺少的nil。