Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios5 NSInvalidArgumentException,在Monotouch中抛出Unrec_Ios5_Xamarin.ios - Fatal编程技术网

Ios5 NSInvalidArgumentException,在Monotouch中抛出Unrec

Ios5 NSInvalidArgumentException,在Monotouch中抛出Unrec,ios5,xamarin.ios,Ios5,Xamarin.ios,我面临的问题是,在几个测试设备中,只有一个设备被抛出。所有设备均为iPhone 4s iOS 5.1.1,另一台为iOS 6.0.1 类似的问题有好几个答案,但没有一个同时包含这两种症状 应用程序是用Monotouch编写的 问题的症候是 应用程序不会更改受影响设备上的方向。 访问受影响设备上的某些视图时,会引发NSInvalidArgumentException 完全例外的情况是: Objective-C exception thrown. Name: NSInvalidArgumentEx

我面临的问题是,在几个测试设备中,只有一个设备被抛出。所有设备均为iPhone 4s iOS 5.1.1,另一台为iOS 6.0.1

类似的问题有好几个答案,但没有一个同时包含这两种症状

应用程序是用Monotouch编写的

问题的症候是

应用程序不会更改受影响设备上的方向。 访问受影响设备上的某些视图时,会引发NSInvalidArgumentException

完全例外的情况是:

Objective-C exception thrown. Name: NSInvalidArgumentException Reason: -[UITableViewCell updateConstraintsIfNeeded]: unrecognized selector sent to instance 0x4e07540 抛出Objective-C异常。名称:NSInvalidArgumentException原因:-[UITableViewCell UpdateConstraintSifRequired]:发送到实例0x4e07540的选择器无法识别 堆栈跟踪为

MonoTouch.Foundation.MonoTouchException: Objective-C exception thrown. Name: NSInvalidArgumentException Reason: -[UITableViewCell updateConstraintsIfNeeded]: unrecognized selector sent to instance 0x4c3cc20 at MonoTouch.UIKit.UIView.UpdateConstraintsIfNeeded () [0x00010] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIView.g.cs:1626 at XXXXXX.IOS.Dialogs.NewStyledMultilineElement.GetCell (MonoTouch.UIKit.UITableView tv) [0x0000f] in /Users/gavin/Perforce/Jon_PI-151_9051/XXXXXX/XXXXXX/v1.3.1/Mobile/XXXXXX/IOS/XXXXXX.Dialogs/My Work/WorkDetailDialogController.cs:30 at MonoTouch.Dialog.DialogViewController+Source.GetCell (MonoTouch.UIKit.UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath) [0x00029] in /Developer/MonoTouch/Source/MonoTouch.Dialog/MonoTouch.Dialog/DialogViewController.cs:340 at MonoTouch.UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x0004c] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:38 at XXXXXX.IOS.Application.Application.Main (System.String[] args) [0x00000] in /Users/gavin/Perforce/Jon_PI-151_9051/Pall/XXXXXX/v1.3.1/Mobile/XXXXXX/IOS/XXXXXX.Application/Main.cs:28 单调的异常:抛出Objy-C异常。名称:NSInvalidArgumentException原因:-[UITableViewCell UpdateConstraintSifRequired]:发送到实例0x4c3cc20的选择器无法识别 在/Developer/MonoTouch/Source/MonoTouch/src/UIKit/UIView.g.cs:1626中的MonoTouch.UIKit.UIView.UpdateConstraintsIfNeeded()[0x00010]处 在XXXXXX.IOS.Dialogs.NewStyledMultilineElement.GetCell(MonoTouch.UIKit.UITableView tv)[0x0000f]in/Users/gavin/Perforce/Jon_PI-151_9051/XXXXXX/XXXXXX/v1.3.1/Mobile/XXXXXX/IOS/XXXXXX.Dialogs/My Work/worketaildialogcontroller.cs:30 在DimououCuff.DistaValueCudio+SooCu.GETCLE(MyOrtho.UiKiT.UITababVIEW TabLVIEW,MyTrask.Buffig.NSnxDebug索引路径)[0x000 029 ]中//Deave/MonoTouch/Soist/Maldouc.Cudio/MutoCouC.Caldie/DealVIEWVisualCudith.Cs:340 在/Developer/MonoTouch/Source/MonoTouch/src/UIKit/UIApplication.Main中的MonoTouch.UIKit.UIApplication.Main(System.String[]args,System.String principalClassName,System.String delegateClassName)[0x0004c] 在XXXXXX.IOS.Application.Application.Main(System.String[]args)[0x00000]in/Users/gavin/Perforce/Jon_PI-151_9051/Pall/XXXXXX/v1.3.1/Mobile/XXXXXX/IOS/XXXXXX.Application/Main.cs:28 导致异常的代码为

public class NewStyledMultilineElement : StyledMultilineElement { public override UITableViewCell GetCell (UITableView tv) { UITableViewCell cell = base.GetCell(tv); cell.SelectionStyle = UITableViewCellSelectionStyle.None; cell.UpdateConstraintsIfNeeded(); return cell; } public NewStyledMultilineElement(string caption, string value) :base(caption,value) { } } 公共类NewStyledMultilineElement:StyledMultilineElement { 公用覆盖UITableViewCell GetCell(UITableView电视) { UITableViewCell cell=base.GetCell(电视); cell.SelectionStyle=UITableViewCellSelectionStyle.None; cell.updateConstraintSifRequired(); 返回单元; } public NewStyledMultilineElement(字符串标题,字符串值):基(标题,值) { } } 抛出错误的行是 cell.updateConstraintSifRequired()

版本信息为

MonoDevelop 3.0.5 运行时 Mono 2.10.9 GTK 2.24.10 代码4.5.1 Monotouch 6.0.6

已将受影响设备上的设置与正常工作的其他设备进行了比较,没有明显差异

症状可能是针对不同的问题。然而,这是抛出的唯一接受

任何帮助都将不胜感激

进一步的调查暂时解决了这个问题。然而,根本原因尚未得到确认。解决办法如下

为了解决方向症状,将以下代码添加到基本视图控制器中,所有视图控制器都从该基本视图控制器中删除


公共覆盖布尔值应自动旋转指针面方向(UIInterfaceOrientation到InterfaceOrientation)
{
返回true;
}

为了解决NSInvalidArgumentException,使用了StyledMultilineElement而不是派生类。这一问题可能是由GC引起的,但请对此加以说明


解决方案解决了问题,但没有找出根本原因。任何解释为什么这只发生在一个设备上而不是所有设备上都会有帮助。

您使用的是iOS6的一个功能,它是基于约束的布局。这在iOS5上不可用。因此,调用
updateConstraintSifRequired()
将使运行在iOS5.x及更旧版本上的所有设备失败

请参阅苹果的文档:

updateConstraintSifRequired更新接收的约束 视图及其子视图

  • (void)updateConstraintsIfNeeded讨论每当为视图触发新的布局过程时,系统调用此方法以确保 视图及其子视图的任何约束都将更新为 来自当前视图层次及其约束的信息。这 方法由系统自动调用,但可以调用 如果需要检查最新的约束,请手动执行
子类不应重写此方法

在iOS 6.0及更高版本中提供可用性。在UIView.h中声明


谢谢你的回复。但是,我不能接受这个答案,因为我拥有的8台测试设备中,除了1台是iOS 6.0.1外,其余都是iOS 5.1.1。应用程序仅在运行5.1.1的1台设备上失败。您正在使用iOS6方法。没有什么可讨论的。可能它已经在iOS5中了,但可能它不完整/损坏。但可以肯定的是:它并非用于公共用途。是否使用受约束的布局?如果没有:只需取消通话。这不是必需的。谢谢你的意见。我已经删除了问题代码,它确实解决了问题。我不知道该方法可能是一个私有API,或者没有完全实现。但是,这并不能解释为什么只有一个设备对代码做出错误反应,而其他设备则根据需要使用相同的操作系统功能。这是我急于解决的问题,因为它可能会影响部署测试所需的小时数。再次感谢你。