Не удается вызвать метод из другого ViewController - PullRequest
0 голосов
/ 29 августа 2011

Я пытаюсь сделать следующее

 ReaderController *readerController =  [[[ReaderController alloc] init] autorelease];;
readerController.fileName = fileName;
[readerController handleSingleTap];

, где handleSingleTap - это метод в ReaderController, но я не могу вызвать его ... метод следующий

 - (void)handleSingleTap:(UITapGestureRecognizer *)recognizer
{
#ifdef DEBUGX
    NSLog(@"%s", __FUNCTION__);
#endif

    ReaderDocument *document = [ReaderDocument unarchiveFromFileName:SAMPLE_DOCUMENT];

    if (document == nil) // Create a brand new ReaderDocument object the first time we run
    {
        NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
        NSString *documentsDirectoryPath = [searchPaths objectAtIndex:0]; 
        NSString *path = [documentsDirectoryPath stringByAppendingPathComponent:[[NSString stringWithFormat:@"%@",fileName] stringByAppendingPathExtension:@"pdf"]];



        [self checkAndCreatePList];
        NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:pListPath];

        [plistDict setValue: [NSString stringWithFormat:@"%@",fileName]  forKey:@"fileName"];
        [plistDict writeToFile:pListPath atomically: YES];



//      NSString *filePath = [[NSBundle mainBundle] pathForResource:path ofType:nil];

        document = [[[ReaderDocument alloc] initWithFilePath:path password:nil] autorelease];
    }

    if (document != nil) // Must have a valid ReaderDocument object in order to proceed
    {
        ReaderViewController *readerViewController = [[ReaderViewController alloc] initWithReaderDocument:document];

        readerViewController.delegate = self; // Set the ReaderViewController delegate to self

#if (DEMO_VIEW_CONTROLLER_PUSH == TRUE)

        [self.navigationController pushViewController:readerViewController animated:YES];

#else // present in a modal view controller

        readerViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
        readerViewController.modalPresentationStyle = UIModalPresentationFullScreen;

        [self presentModalViewController:readerViewController animated:YES];

#endif // DEMO_VIEW_CONTROLLER_PUSH

        [readerViewController release]; // Release the ReaderViewController
    }
}

что не так и почему я не могу назвать этот метод, пожалуйста, мне нужны некоторые детали, любая помощь приветствуется

Ответы [ 2 ]

2 голосов
/ 29 августа 2011

ну, это довольно просто, вы сделали:

[readerController handleSingleTap];

когда на самом деле вы должны сделать:

[readerController handleSingleTap:yourRecognizer];

или

[readerController handleSingleTap:nil];

если вы не передадите аргумент распознавателя, вы отправите сигнал handleSingleTap, когда ожидается handleSingleTap:

1 голос
/ 29 августа 2011

То, что вы упустили, это то, как работают методы и селекторы.Двоеточие в определении метода является частью имени селектора.Например, эти три метода:

-(void)updateInterface;
-(void)handleSingleTap:(id)sender;
-(void)updateItemAtIndex:(NSInteger)integer animated:(BOOL)animated;

Имеет следующие полные имена селекторов:

updateUserInterface
handleSingleTap:
updateItemAtIndex:animated:

Имена должны всегда совпадать полностью.Включая двоеточия, которые, я должен еще раз подчеркнуть, являются частью имен.

Вы обращаетесь к этому:

[readerController handleSingleTap];

Не включает двоеточие в имени, и поэтому код делаетПредположение, что метод с этим определением существует, и пытается вызвать его:

-(id)handleSingleTap;

Поскольку он не существует, вы получаете исключение, и ваше приложение вылетает.

Если вы этого не сделаетеЕсли вы хотите отправить аргумент, вы должны иметь полное имя.Но может передавать аргумент, который можно игнорировать, например nil, например:

[readerController handleSingleTap:nil];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...