0

私のアプリケーションでは、クリックRightBarButtonItemすると別のView Controllerがプッシュされますが、次のエラーが表示されます。

-[__NSCFString _forgetDependentConstraint:]: unrecognized selector sent to instance 0x74c5960

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString _forgetDependentConstraint:]: unrecognized selector sent to instance 0x74c5960'

私がしたことの間違いはわかりません。

しかし、そのビューコントローラーでは、このコードのみをviewDidLoad2番目のビューコントローラーに配置しました

            [self.navigationController setNavigationBarHidden:TRUE animated:YES]; 




        first view controller contains the following code

        - (void)viewDidLoad
        {
            [super viewDidLoad];

            [self.navigationController setNavigationBarHidden:TRUE animated:YES];
        baseView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 416)];

            UINavigationBar *navBar1 = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
            UINavigationItem *navItem1 = [[UINavigationItem alloc] initWithTitle:@""];
            [navBar1 pushNavigationItem:navItem1 animated:NO];
            UIBarButtonItem *menuButton1 = [[UIBarButtonItem alloc] initWithTitle:@""
                                                                            style:UIBarButtonItemStyleBordered
                                                                           target:self
                                                                           action:@selector(toggleMenu1)];
            navItem1.leftBarButtonItem = menuButton1;
            [baseView.self addSubview:navBar1];
            UIImageView *backgroundImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"scr2.png"]];
            [baseView.self addSubview:backgroundImage];

            UIPanGestureRecognizer *pancontrol = [[UIPanGestureRecognizer alloc]
                                           initWithTarget:self action:@selector(panLayer:)];
            [self.view addGestureRecognizer:pancontrol];

            topView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 416)];

            UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
            UINavigationItem *navItem = [[UINavigationItem alloc] initWithTitle:@""];
            [navBar pushNavigationItem:navItem animated:NO];
            UIBarButtonItem *menuButton = [[UIBarButtonItem alloc] initWithTitle:@"Menu"
                                                 `enter code here`                         style:UIBarButtonItemStyleBordered                                                                  target:self
                                                                          action:@selector(toggleMenu)];
            navItem.leftBarButtonItem = menuButton;
            UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithTitle:@"Add"
                                                                          style:UIBarButtonItemStyleBordered
                                                                         target:self
                                                                         action:@selector(toggleAdd)];
            navItem.rightBarButtonItem = addButton;
            [topView.self addSubview:navBar];
            backgroundImage1 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"notebookbg.png"]];
            [topView.self addSubview:backgroundImage1];
            [baseView.self addSubview:topView];
            [self.view addSubview:baseView];
                }

これらは私のコードです。

この最初のViewControllerから次のViewControllerに移動する方法。

4

2 に答える 2

1

問題はAddNewNoteクラスにあるようです。Cocoaneticsが提案したように、NSStringにカテゴリを作成し、そのカテゴリに_forgetDependentConstraint:を実装します。ファイル#importに新しいカテゴリヘッダーを追加する.PCH

于 2012-12-09T13:37:09.693 に答える
1

1番目または2番目のViewControllerのタイトルまたはテキストプロパティの1つに実際のNSStringを適切に割り当てていないように聞こえます。

問題が発生する場所を見つけるには、次のようにします。-NSStringにデバッグカテゴリを実装し、ブレークポイントのみを含む_forgetDependentConstraint:メソッドを追加します。-このメソッドで実行が中断した場合は、呼び出しスタックを検査して、正確にどこで中断しているかを確認します-メソッド内の自己も検査し、原因の文字列を確認します。

UIViewではなくビュー階層のどこかにNSStringがあるように思えます。UIViewサブクラスにはこの_forgetDependentConstraint:メソッドがありますが、文字列にはありません。

于 2012-12-09T10:03:45.967 に答える