【问题标题】:iOS: Tagging ErrorsiOS:标记错误
【发布时间】:2025-12-17 16:40:01
【问题描述】:

我正在开发一个类似于照片库的应用程序,并且我正在实现让用户从他们的库中删除照片的选项。为此,我决定在每张图片上放置一个隐形按钮。当用户点击“编辑”按钮时,每张图片上隐藏的删除按钮将变为活动状态。为了简单起见,我在每个隐藏按钮上使用了相同的 IBOutlet,并且我在 Interface Builder 中适当地标记了每个按钮。当用户点击图片上的按钮时,会出现一个警告视图,询问他们是否真的要删除它。如果他们点击是,我会打电话给removeObjectAtIndex。这是我正在使用的代码:

- (IBAction)deleteButtonPressed:(id)sender {
    UIAlertView *deleteAlertView = [[UIAlertView alloc] initWithTitle:@"Delete"
                                                              message:@"Are you sure you want to delete this photo?"
                                                             delegate:self
                                                    cancelButtonTitle:@"Yes"
                                                    otherButtonTitles:@"No", nil];
    [deleteAlertView show];
    int imageIndex = sender.tag;
    deleteAlertView.tag = imageIndex;

}

- (void)deleteAlertView:(UIAlertView *)deleteButtonPressed
       didDismissWithButtonIndex:(NSInteger)buttonIndex {
    if (buttonIndex != [deleteButtonPressed cancelButtonIndex]) {

        [array removeObjectAtIndex:deleteButtonPressed.tag];

    }
  [self.user setObject:array forKey:@"images"];
}

我得到的错误是突出显示int imageIndex = sender.tag;,并指出“找不到__strong id 类型的对象的属性tag”。我一直在研究这个错误,但没有找到任何有用的信息。我还是编程新手,所以我根本不知道如何解决这个问题。非常感谢任何帮助,谢谢!

【问题讨论】:

    标签: objective-c ios xcode tags


    【解决方案1】:

    您需要将发件人转换为适当的类型。例如int imageIndex = ((UIView*)sender).tag;

    【讨论】:

    • 酷,非常感谢。我在 deleteButtonPressed 方法中添加了NSLog(@"Sender is %@", sender);,它说发送者是 UIButton。所以,我添加了int imageIndex = ((UIButton *)sender).tag;。错误消失了,但是当我在警报视图中单击“是”时,没有任何反应。我应该为此创建另一个问题吗?
    • Joey,您以错误的顺序指定了按钮名称,并且(根据 iOS 界面指南)它们的标签也很糟糕。你的 alert-view 调用应该更像…delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Delete", nil。实际的逻辑错误是您的“是”按钮被标记为取消按钮,并且您的委托方法正在检查按下的按钮是否不是取消按钮。不过,您可以保留委托方法:只需在设置警报视图时交换按钮文本的顺序,理想情况下,更清楚地命名它们。
    • @Noah Witherspoon 非常感谢,我现在刚刚改变了它。但问题仍然存在,我是否应该再问一个关于为什么图像不会删除的问题?