2014-02-18 3 views
-1

Я знаю, что другие подобные вопросы были заданы на SO, но я прошел через них и их предложения, и просто не могу заставить это работать вообще.Метод вызова от другого контроллера

У меня есть контроллер вида с ассоциированными h и m файлами, и они получают доступ к другому h и m файлу (а не к контроллеру представления).

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

Фрагменты кода:

ParentViewController.h:

#import <UIKit/UIKit.h> 

@interface ParentViewController : UIViewController <UITextFieldDelegate> { 
.... 
} 

@end 

ParentViewController.m:

#import "ParentViewController.h" 
#import "OtherView.h" 

@implementation ParentViewController 

- (void)callThis { 
    NSLog(@"this is not called"); 
} 

@end 

OtherView.h:

#import <UIKit/UIKit.h> 

@interface OtherView : UIView { 
... 
} 

@end 

OtherView.m:

#import "OtherView.h" 

@implementation OtherView 

-(void)done { 
    [self callThisFirst]; 
    [ParentViewController callThis]; 
} 

-(void)callThisFirst { 
    NSLog(@"This is called"); 
} 

@end 

Может ли кто-нибудь помочь мне вызвать метод в родительском файле?

Благодаря

+0

Сначала вам нужно передать экземпляр ParentViewController в свой экземпляр OtherView. Где вы инициализируете свой объект OtherView? Можем ли мы увидеть этот код? – Linuxios

+1

Возможный дубликат [Вызов функции с другого контроллера вида для iphone] (http://stackoverflow.com/questions/2388990/calling-a-function-from-a-different-view-controller-for-iphone) –

+0

Может быть очевидным, но убедитесь, что '- (void) callThis;' находится в вашем ParentViewController .h – JMarsh

ответ

1

Во-первых, метод, который вы создали это метод экземпляра, так как он с префиксом -, но где вы пытаетесь назвать это, похоже, вы пытаетесь вызвать метод класса, потому что вы не указываете объект, вы указываете имя класса.

Во-вторых, в вашем классе ParentViewController вы не показываете свой метод callThis, указанный в вашем файле заголовка, что означает, что OtherView ничего не знает о методе. Вы должны добавить следующую строку в @interface в ParentViewController.h:

- (void)callThis; 

В-третьих, вы должны добавить #import для ParentViewController.h в OtherView.m для OtherView класса даже знать о ParentViewController классе.

0

Так что в вашем ParentViewController.h у вас есть:

...} 

@end 

То есть, вы не объявляя метод, который вы хотите позвонить. Но мы видим, что это метод экземпляра, так говорит реализация:

- (void)callThis { //... 

Но вы пытаетесь назвать его как метод класса:

[ParentViewController callThis]; 

Это не будет работать. ParentViewController не имеет метода +callThis, поэтому нет кубиков. Вам нужно передать экземпляр ParentViewController другого объекта, а затем называют это нравится:

[theParentViewController callThis]; 

где theParentViewController является указателем на фактический ParentViewController объекта.Вам также нужно добавить объявление для -callThis в ParentViewController.h, т.е .:

...} 

-(void)callThis; 

@end 
0

Похоже, что вы хотите callThis на ParentViewController быть метод класса, а не метод экземпляра.

Просто измените: -(void)callThis на +(void)callThis и скопируйте эту подпись в свое объявление @interface в ParentViewController.h.

Вам также необходимо позвонить #import "ParentViewController.h" в OtherView.m. Вам не нужно #import "OtherView.h" в ParentViewController.h, так как вы не ссылаетесь ни на что из этого класса.

+0

Это прекрасное решение, если вы действительно имеете в виду, что 'callThis' - метод класса. Просто убедитесь, что вы понимаете разницу между методом класса и методом экземпляра - они совершенно разные. ** Обновление: ** Я заметил, что ОП изменил 'callThis' в реализации на метод экземпляра, поэтому решение здесь больше не применяется. – Caleb

Смежные вопросы