- (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)。那是为什么?
答案 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的唯一方法是,方法本身从未被实际调用过。