2011-10-31 54 views
0
- (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)]; 
} 
} 

此行式IO /目标C:添加的NSString对象的NSMutableArray,NSMutableArray的是(空)

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

打印(无效),而作为该行

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; 
} 

但我仍然不断收到(空),当我进入我的数组。这是为什么?

+1

是你的问题中的拼写错误,你正在添加对象到urlIndex(大概是一个整数)而不是urlHistory? – jrturton

+0

是的,修正了那个谢谢,但那是在一个不相关的线上... – Gibson

+1

有没有不相关的线:) – jrturton

回答

6

听起来像你的urlHistory对象是nil。在nil对象上调用-objectAtIndex:将返回nil。你可能忘了初始化你的-init中的urlHistory,或者你实际上并没有调用你认为你的-init方法(例如,如果你的VC是从一个笔尖加载它将使用-initWithCoder:而不是-initWithNibName:bundle:)。

为了记录在案,如果-objectAtIndex:NSArray不断返回nil,这意味着数组本身是nil。既然NSArray不能存储nil,-objectAtIndex:与有效索引将永远不会返回nil-objectAtIndex:与无效索引将引发异常。因此,-objectAtIndex:返回nil的唯一方法是如果方法本身从未实际调用。

+0

在我的initWithNibName我已经有urlHistory = [[NSMutableArray alloc] init];我还可以做些什么? – Gibson

+1

@Gibson:如果不能访问所有的代码,我无法真正回答这个问题,但是你可以通过简单地注销'NSLog(@“urlHistory:%@”,urlHistory)'来验证这是怎么回事。你应该看到'urlHistory:(null)'注销。 –

+0

这确实是发生了什么,但仍然不知道该怎么办... – Gibson