‘NSObject’ может не отвечать на -NavigationController

#iphone #objective-c #xcode #uiviewcontroller #navigationcontroller

#iPhone #objective-c #xcode #uiviewcontroller #navigationcontroller

Вопрос:

Привет, в настоящее время у меня есть предупреждение в строке кода, где я пытаюсь вывести новый вид на экран. Outline // мой NSObject получает code = 1 с моего настроенного сервера. Все работает нормально, приходит код, который затем инициализирует AlertView, где я настроил оператор if для отслеживания нажатия кнопки моего сообщения AlertView. При нажатии этой кнопки мое приложение завершает работу.

Я объявил свой ViewController представления, которое я пытаюсь отправить, в его заголовочном файле, и ошибок нет, только предупреждение при компиляции.

это мой NSObject, который я создал

     /////.h
    #import <Foundation/Foundation.h>


@interface alerts : NSObject {

}

- (void)pleaseRegisterDevice;

@end


/////.m
#import "alerts.h"
#import "instaCode1_3AppDelegate.h"
#import "RegisterDeviceViewController.h"


@implementation alerts

//use this alert when phone falls out of sync
- (void)pleaseRegisterDevice {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Please Register Device"
                                                    message:@"click OK to register"
                                                   delegate:self
                                          cancelButtonTitle:@"OK"
                                          otherButtonTitles:nil];

    [alert autorelease];
    [alert show];

}


//Catch pleaseRegisterDevice method
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
    NSString *buttonTitle=[alertView buttonTitleAtIndex:buttonIndex];
    if ([buttonTitle isEqualToString:@"OK"]) {
        NSLog(@"msg from alertView method");

        //open new wndow

        RegisterDeviceViewController *regViewController = [[RegisterDeviceViewController alloc] init];


        //Push it onto the top pf the navigation controller's stack
        **[[self navigationController] pushViewController:regViewController animated:YES];**



    }
    else {
        NSLog(@"was not able to push view");
    }

}

- (void)dealloc {
    [super dealloc];
}
@end
  

Я выделил жирным шрифтом строку кода, в которой я получаю предупреждение ‘alerts’, возможно, не отвечает на -NavigationController

буду признателен за любую помощь.

Ответ №1:

Я не думаю, что у NSObject подкласса есть UINavigationController … Вам нужно получить указатель на навигационный контроллер вашего делегата приложения следующим образом

 MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate.navigationController pushViewController:regViewController animated:YES];
  

Комментарии:

1. Спасибо, это сработало. Я знал, что проблема была как-то связана с этим, но из-за моего очевидного недостатка опыта я не был уверен в точных деталях. Спасибо.

Ответ №2:

navigationController это свойство, определенное в UIViewController . У NSObject A нет этого метода.

Комментарии:

1. 🙂 спасибо, поскольку я новичок в подобной инкапсуляции своего кода, вероятно, это всего лишь второй раз, когда я работаю с NSObject.. и был не совсем осведомлен о правилах, касающихся такого рода вещей. Спасибо за ваш ответ.

Ответ №3:

У вас нет какого-либо элемента экземпляра или метода с именем NavigationController, отсюда и предупреждение.