【问题标题】:iOS/Objective-C: Adding NSString object to NSMutableArray, NSMutableArray is (null)iOS/Objective-C:将 NSString 对象添加到 NSMutableArray,NSMutableArray 为 (null)
【发布时间】:2011-10-31 21:13:01
【问题描述】:
- (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);

打印实际的 URL。

在我的 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)。这是为什么呢?

【问题讨论】:

  • 这是您的问题中的错字吗,您将对象添加到 urlIndex(可能是整数)而不是 urlHistory?
  • 是的,谢谢,但那是在不相关的行上...
  • 没有不相关的行:)

标签: objective-c ios nsstring nsmutablearray


【解决方案1】:

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

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

【讨论】:

  • @Gibson:如果无法访问您的所有代码,我无法真正回答这个问题,但您可以通过简单地注销 NSLog(@"urlHistory: %@", urlHistory) 来验证这是怎么回事。您应该会看到 urlHistory: (null) 已注销。
  • @gibson,您确定使用 initWithNibName 创建控制器吗?你用那个方法登录了吗?
  • @Gibson:如果您的视图控制器是在 nib 中创建的(例如 VC 本身在 nib 中),那么它将使用 -initWithCoder: 而不是 -initWithNibName:bundle:
  • @jrturton:是的,我看到他的评论也这么说,这就是为什么我没有建议他使用错误的 init 方法。
  • @KevinBallard - 只需更新您的答案,它比我的要好得多,多一个只会是噪音。
猜你喜欢
  • 1970-01-01
  • 2011-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
相关资源
最近更新 更多