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:测试图像是不是存在[重复]