iOS:Viewdidload 中的 NSMutableArray
在我的项目中,我使用一个 NSmutablearray,我在 .m (viewDidLoad) 中填充了 UIImageView,
arrayView = [[NSMutableArray alloc] initWithObjects: image1, image2, image3, nil];
但是
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
在我编写的
int i = 1;
[[arrayView objectAtIndex:i] setImage:image];
方法中,有一个异常,说我的数组是空的......为什么?
in my project I use a NSmutablearray that I fill with UIImageView in .m (viewDidLoad)
arrayView = [[NSMutableArray alloc] initWithObjects: image1, image2, image3, nil];
but in method
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
when I write
int i = 1;
[[arrayView objectAtIndex:i] setImage:image];
there is an exception that say that my array is empty...why?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
请发布
viewDidLoad
的其余部分。我想看看image1
是如何初始化的。 行将如果 image1 为 nil,则该 返回一个空数组。您还应该通过不对数据源做出假设来保护您的应用程序免于崩溃。如果数组为空,您不应该崩溃,只需显示一个空的 tableView 即可。
[编辑]
我刚刚阅读了您在其他答案中发表的最后评论。听起来你的 imageView 是在 IB 中创建的。确保它们已连接到 IB 中的
image1
等插座。Please post the rest of
viewDidLoad
. I want to see howimage1
is initialized. The line:will return an empty array if
image1
is nil. You should also protect your app from crashing by not making assumptions about the data source. You shouldn't crash if the array is empty, just display an empty tableView.[EDIT]
I just read the last comment you made in the other answer. Sounds like your imageViews are created in IB. Make sure they are connected to the
image1
etc outlets in IB.尝试这样做:
分开访问数组元素(通过将其分配给实际的 UIImageView 对象),然后分配新图像可能会有所帮助。我见过这样的情况:如果您堆叠太多操作,事情就会变得混乱,特别是当您处理不同类型的对象时,这些对象可能有也可能没有您正在使用的选择器。
为什么你的数组变成空是另一个问题。在 viewDidLoad 中初始化它似乎是正确的。您可能需要在表方法中添加一些“保护”(如上所述)以避免访问空数组。然后在
viewWillAppear:
这样的方法中,调用reloadData
。Try this instead:
Separating accessing the array element (by assigning it to an actual UIImageView object) and then assigning the new image may be helpful. I've seen cases where if you stack up too many operations things get confused, especially if you are dealing with objects of different types that may or may not have the selectors you're using.
Why your array is turning up empty is another issue. Initializing it in
viewDidLoad
seems right. You may need to add some "protection" (as above) in your table methods to avoid accessing an empty array. Then in method likeviewWillAppear:
, callreloadData
.