iOS:Viewdidload 中的 NSMutableArray

发布于 2024-11-01 02:12:19 字数 457 浏览 2 评论 0原文

在我的项目中,我使用一个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

零度℉ 2024-11-08 02:12:19

请发布 viewDidLoad 的其余部分。我想看看 image1 是如何初始化的。 行将

arrayView = [[NSMutableArray alloc] initWithObjects: image1, image2, image3, nil];

如果 image1 为 nil,则该 返回一个空数组。您还应该通过不对数据源做出假设来保护您的应用程序免于崩溃。如果数组为空,您不应该崩溃,只需显示一个空的 tableView 即可。

[编辑]

我刚刚阅读了您在其他答案中发表的最后评论。听起来你的 imageView 是在 IB 中创建的。确保它们已连接到 IB 中的 image1 等插座。

Please post the rest of viewDidLoad. I want to see how image1 is initialized. The line:

arrayView = [[NSMutableArray alloc] initWithObjects: image1, image2, image3, nil];

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.

黑寡妇 2024-11-08 02:12:19

尝试这样做:

if (i < [arrayView count]) {
    UIImageView *imageView = [arrayView objectAtIndex:i];
    imageView.image = image;
}

分开访问数组元素(通过将其分配给实际的 UIImageView 对象),然后分配新图像可能会有所帮助。我见过这样的情况:如果您堆叠太多操作,事情就会变得混乱,特别是当您处理不同类型的对象时,这些对象可能有也可能没有您正在使用的选择器。

为什么你的数组变成空是另一个问题。在 viewDidLoad 中初始化它似乎是正确的。您可能需要在表方法中添加一些“保护”(如上所述)以避免访问空数组。然后在viewWillAppear:这样的方法中,调用reloadData

Try this instead:

if (i < [arrayView count]) {
    UIImageView *imageView = [arrayView objectAtIndex:i];
    imageView.image = image;
}

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 like viewWillAppear:, call reloadData.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文