2011-11-21 45 views
1

我有一个简单的按钮被添加到UINavigationBar,Min OS是3.2,我们用默认编译器编译。我有MT 5.0:MonoTouch:使用SetBackgroundImage()抛出选择器错误

  saleImg = UIImage.FromFileUncached (shoppingImg); 
      saleButton = new UIBarButtonItem ("", UIBarButtonItemStyle.Bordered, (s, o) => {ItunesHelper.Open(); }); 
      saleButton.SetBackgroundImage(saleImg,UIControlState.Normal,UIBarMetrics.Default); 
      saleButton.SetBackgroundImage(saleImg,UIControlState.Selected, UIBarMetrics.Default); 
      saleButton.SetBackgroundImage(saleImg,UIControlState.Highlighted, UIBarMetrics.Default); 

但在运行时,它抛出的错误:

Objective-C exception thrown. Name: NSInvalidArgumentException Reason: -[UIBarButtonItem setBackgroundImage:forState:barMetrics:]: unrecognized selector sent to instance 0x76d4d00

回答

2

UIBarButtonItem.SetBackgroundImage方法与iOS 5介绍。由于您收到“无法识别的选择器...”消息,因此我只能假设您正在iOS版本低于5.0的设备上运行该应用程序。

如果您希望您的应用程序是向后兼容的,创建一个按钮,并与UIBarButtonItem(UIView)构造函数初始化UIBarButtonItem

UIButton button = UIButton.FromType(UIButtonType.Custom); 
button.SetBackgroundImage(saleImg, UIControlState.Normal); 
button.TouchUpInside += (s, o) => {ItunesHelper.Open(); }; 
UIBarButtonItem saleButton = new UIBarButtonItem(button); 

设定最低OS版本并不意味着MonoDevelop的或编译器会通知你的API兼容性。它仅仅是Info.plist中的一个设置,它将决定您的应用程序是否会出现在App Store上,用于该版本的设备。

相关问题