2

私が直面している問題は、いくつかのテスト デバイスのうち 1 つのデバイスでのみスローされます。すべてのデバイスは iPhone 4s iOS 5.1.1 で、別のデバイスは iOS 6.0.1 です。

同様の質問に対する回答はいくつかありますが、両方の症状を含むものはありません。

アプリケーションは Monotouch で作成されています。

問題の症状は次のとおりです。

アプリケーションは、影響を受けるデバイスの向きを変更しません。影響を受けるデバイスで特定のビューにアクセスすると、NSInvalidArgumentException がスローされます。

完全な例外は次のとおりです。

Objective-C 例外がスローされました。名前: NSInvalidArgumentException 理由: -[UITableViewCell updateConstraintsIfNeeded]: 認識されないセレクターがインスタンス 0x4e07540 に送信されました

スタックトレースは

MonoTouch.Foundation.MonoTouchException: Objective-C 例外がスローされました。名前: NSInvalidArgumentException 理由: -[UITableViewCell updateConstraintsIfNeeded]: 認識されないセレクターがインスタンス 0x4c3cc20 に送信されました
  /Developer/MonoTouch/Source/monotouch/src/UIKit/UIView.g.cs:1626 の MonoTouch.UIKit.UIView.UpdateConstraintsIfNeeded () [0x00010] で
  /Users/gavin/Perforce/Jon_PI-151_9051/XXXXXX/XXXXXX/v1.3.1/Mobile/XXXXXX/IOS/XXXXXX.Dialogs の XXXXXX.IOS.Dialogs.NewStyledMultilineElement.GetCell (MonoTouch.UIKit.UITableView テレビ) [0x0000f] で/私の仕事/WorkDetailDialogController.cs:30
  /Developer/MonoTouch/Source/MonoTouch.Dialog/MonoTouch.Dialog/DialogViewController.cs:340 の MonoTouch.Dialog.DialogViewController+Source.GetCell (MonoTouch.UIKit.UITableView tableView、MonoTouch.Foundation.NSIndexPath indexPath) [0x00029] で
  /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:38 の MonoTouch.UIKit.UIApplication.Main (System.String[] args、System.String principalClassName、System.String delegateClassName) [0x0004c] で
  /Users/gavin/Perforce/Jon_PI-151_9051/Pall/XXXXXX/v1.3.1/Mobile/XXXXXX/IOS/XXXXXX.Application の XXXXXX.IOS.Application.Application.Main (System.String[] args) [0x00000] で/Main.cs:28

例外の原因となっているコードは

public class NewStyledMultilineElement : StyledMultilineElement
{
    public override UITableViewCell GetCell (UITableView tv)
    {
            UITableViewCell cell = base.GetCell(tv);
            cell.SelectionStyle = UITableViewCellSelectionStyle.None;
            cell.UpdateConstraintsIfNeeded();
            セルを返します。
    }

    public NewStyledMultilineElement(文字列キャプション, 文字列値) :base(キャプション,値)
    {
    }
}

エラーをスローしている行は cell.UpdateConstraintsIfNeeded(); です。

バージョン情報は

MonoDevelop 3.0.5 ランタイム Mono 2.10.9 GTK 2.24.10 XCode 4.5.1 Monotouch 6.0.6

影響を受けたデバイスの設定は、期待どおりに機能する他のデバイスと比較されており、明確な違いはありません。

症状はさまざまな問題によるものである可能性があります。ただし、これはスローされる唯一の受け入れです。

どんな助けでも大歓迎です

詳細な調査により、問題は一時的に解決されました。ただし、根本的な原因は確認されていません。解決策は次のとおりです。

向きの問題を解決するために、すべてのビュー コントローラーの派生元であるベース ビュー コントローラーに次のコードが追加されました。

public override bool ShouldAutoRotateToInterfaceOrientation(UIInterfaceOrientation toInterfaceOrientation) { return true; }

NSInvalidArgumentException を解決するために、派生クラスの代わりに StyledMultilineElement が使用されています。この問題は GC が原因である可能性がありますが、検証していただければ幸いです。

解決策は、根本的な原因を特定せずに問題を解決します。これがすべてのデバイスではなく 1 つのデバイスでのみ発生している理由の説明は役に立ちます。

4

1 に答える 1

1

制約ベースのレイアウトである iOS6 の機能を使用しています。これは iOS5 では使用できません。したがって、呼び出しUpdateConstraintsIfNeeded()は、iOS5.x 以前で実行されているすべてのデバイスで失敗します。

Apple のドキュメントを参照してください: http://developer.apple.com/library/ios/#documentation/uikit/reference/uiview_class/uiview/uiview.html#//apple_ref/occ/instm/UIView/updateConstraints

updateConstraintsIfNeeded 受信ビューとそのサブビューの制約を更新します。

  • (void)updateConstraintsIfNeeded 説明 新しいレイアウト パスがビューに対してトリガーされるたびに、システムはこのメソッドを呼び出して、ビューとそのサブビューの制約が現在のビュー階層とその制約からの情報で更新されるようにします。このメソッドはシステムによって自動的に呼び出されますが、最新の制約を調べる必要がある場合は手動で呼び出すことができます。

サブクラスはこのメソッドをオーバーライドすべきではありません。

提供状況 iOS 6.0 以降で利用可能です。UIView.h で宣言

于 2012-12-13T12:37:40.380 に答える