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

Posted

技术标签:

【中文标题】iOS/Objective-C:将 NSString 对象添加到 NSMutableArray,NSMutableArray 为 (null)【英文标题】:iOS/Objective-C: Adding NSString object to NSMutableArray, NSMutableArray is (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? 是的,谢谢,但那是在不相关的行上... 没有不相关的行:) 【参考方案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 - 只需更新您的答案,它比我的要好得多,多一个只会是噪音。

以上是关于iOS/Objective-C:将 NSString 对象添加到 NSMutableArray,NSMutableArray 为 (null)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用evaluateJavaScript 将数据从WKWebview 发送到HTML 文件| iOS | Objective-C

iOS - Objective-C 无法将具有标识符的单元格出列

在 iOS 7/Objective-C 中,如何以编程方式将 UIPickerView 捕捉到它所在的父视图的底部?

IOS / Objective-C:测试图像是不是存在[重复]

Flutter 将 Uint8List 传递给 iOS Objective-c

IOS/Objective-C: MakeUILabel 使用自动布局流向多行