在'__strong id'类型的对象上找不到UIAlertController错误'bounds'

时间:2015-07-06 19:40:06

标签: ios objective-c xcode uialertcontroller

我正在尝试创建一个提醒,当提出时会询问用户是否要从他们的图书馆中选择照片或拍照。我正在使用帖子UIPopover How do I make a popover with buttons like this?中的模板。模板是......

UIAlertController * alertController = [UIAlertController alertControllerWithTitle: nil
                                                                          message: nil
                                                                   preferredStyle: UIAlertControllerStyleActionSheet];
[alertController addAction: [UIAlertAction actionWithTitle: @"Take Photo" style: UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
    // Handle Take Photo here
}]];
[alertController addAction: [UIAlertAction actionWithTitle: @"Choose Existing Photo" style: UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
    // Handle Choose Existing Photo here
}]];

alertController.modalPresentationStyle = UIModalPresentationPopover;

UIPopoverPresentationController * popover = alertController.popoverPresentationController;
popover.permittedArrowDirections = UIPopoverArrowDirectionUp;
popover.sourceView = sender;
popover.sourceRect = sender.bounds;

[self presentViewController: alertController animated: YES completion: nil];

然而在popover.sourceRect = sender.bounds; xcode给出了一个错误,指出Property 'bounds' not found on object of type '__strong id'。这个错误说的是什么,这是如何解决的?

2 个答案:

答案 0 :(得分:2)

您可能会将发件人作为此函数的参数接收,其类型为id,代表通用对象。编译器不知道它有一个名为bounds的属性,因为它可能真的是任何对象。要解决此问题,您需要通过强制转换它来告诉sender实际上是UIView *

UIView* senderView = (UIView *)sender; 

然后你可以执行下一个任务:

popover.sourceView = senderView;
popover.sourceRect = senderView.bounds;

答案 1 :(得分:0)

问题在于您正在配置弹出窗口。

在警报控制器开始演示之前,UIKit框架不会创建def LabelPlate(): n = nuke.thisNode() if n != None: label = n['label'].value() n['label'].setValue('Plate') def LabelLook(): name= "Plate" for node in nuke.allNodes(): if name == node.knob("label").value(): return True def LabelLookTwo(): name= "Plate" for node in nuke.allNodes(): if name == node.knob("label").value(): return node.knob("name").value() def PlateColorspaceSet(): n = LabelLookTwo() if nuke.toNode("n")["colorspace"].value() == "default (sRGB)": nuke.toNode("n")["colorspace"].setValue("sRGB") def LabelQuestion(): if LabelLook() != True: if nuke.ask('Is this Read your main Plate?'): LabelPlate() PlateColorspaceSet() nuke.addOnUserCreate(LabelQuestion, nodeClass = 'Read') 属性。它直到下一个显示更新周期才真正显示,所以不要担心它会先取消配置。

在出示警报控制器后进行配置,你应该没事。