iOS / Objective-C:将NSString对象添加到NSMutableArray,NSMutableArray为(null)

时间:2011-10-31 21:13:02

标签: objective-c ios nsstring nsmutablearray

- (void)webViewDidFinishLoad:(UIWebView *)webView {
if (urlIndex == maxIndex) { 
    maxIndex = maxIndex + 1;

    NSString* sURL = webpage.request.URL.absoluteString;

    [urlHistory addObject:sURL];
    NSLog(@"%d: %@", urlIndex, [urlHistory objectAtIndex:urlIndex]);
    NSLog(@"%d: %@", urlIndex, webpage.request.URL.absoluteString);


    [sURL release];

    urlIndex = urlIndex + 1;
}
else {
    [urlHistory insertObject:webView.request.URL.absoluteString atIndex:(urlIndex - 1)];
}
}

这一行

    NSLog(@"%d: %@", urlIndex, [urlHistory objectAtIndex:urlIndex]);

打印(null),同时作为此行

    NSLog(@"%d: %@", urlIndex, webpage.request.URL.absoluteString);

打印实际的网址。

在我的initWithNibName上我有:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:@"Tab1ViewController" bundle:nil];

if (self) {
    urlHistory = [[NSMutableArray alloc] init];
    urlIndex = 0;
    maxIndex = 0;
}

return self;
}

但是当我访问我的数组时,我仍然继续得到(null)。那是为什么?

1 个答案:

答案 0 :(得分:6)

听起来您的urlHistory对象是nil。在-objectAtIndex:对象上调用nil将返回nil。您可能忘记在urlHistory中初始化-init,或者您实际上并未调用您认为自己的-init方法(例如,如果您的VC是从笔尖加载的,那么它将使用-initWithCoder:代替-initWithNibName:bundle:)。

对于记录,如果-objectAtIndex:上的NSArray返回nil,则表示数组本身为nil。由于NSArray无法存储nil,因此具有有效索引的-objectAtIndex:将永远不会返回nil,而带有无效索引的-objectAtIndex:将引发异常。因此-objectAtIndex:返回nil的唯一方法是,方法本身从未被实际调用过。