Obj-C отправка сообщений между классами - PullRequest
0 голосов
/ 09 января 2011

Я новичок в программировании iPhone. Я пытаюсь отправить сообщение от одного контроллера представления другому. Идея состоит в том, что viewControllerA получает информацию от пользователя и отправляет ее в viewControllerB. Затем предполагается, что viewControllerB отображает информацию в метке.

viewControllerA.h

#import <UIKit/UIKit.h>
@interface viewControllerA : UIViewController
{
    int num;
}

-(IBAction)do;
@end

viewControllerA.m

#import "viewControllerA.h"
#import "viewControllerB.h"

@implementation viewControllerA

- (IBAction)do {
    //initializing int for example
    num = 2;
    viewControllerB *viewB = [[viewControllerB alloc] init];
    [viewB display:num];
    [viewB release];
    //viewA is presented as a ModalViewController, so it dismisses itself to return to the 
    //original view, i know it is not efficient 
    [self dismissModalViewControllerAnimated:YES];
}

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

@end

viewControllerB.h

#import <UIKit/UIKit.h>

@interface viewControllerB : UIViewController
{
    IBOutlet UILabel *label;
}

- (IBAction)openA;
- (void)display:(NSInteger)myNum;

@end

viewControllerB.m

#import "viewControllerB.h"
#import "viewControllerA.h"

@implementation viewControllerB

- (IBAction)openA {
    //presents viewControllerA when a button is pressed
    viewControllerA *viewA = [[viewControllerA alloc] init];
    [self presentModalViewController:viewA animated:YES];
}

- (void)display:(NSInteger)myNum {
    NSLog(@"YES");
    [label setText:[NSString stringWithFormat:@"%d", myNum]];
}

@end

ДА успешно зарегистрировано, но текст метки не изменяется. Я убедился, что все мои соединения в Интерфейсном Разработчике правильны, фактически есть другие (IBAction) методы в моей программе, которые изменяют текст этой самой метки, и все эти другие методы работают отлично ...

Есть идеи, ребята? Вам не нужно давать мне полное решение, любая информация поможет. Спасибо.

1 Ответ

1 голос
/ 09 января 2011

С

viewControllerB *viewB = [[viewControllerB alloc] init];

вы создаете новую viewControllerB. Это не viewControllerB, который (я предполагаю) у вас есть в вашем файле пера. Вы должны сделать для этого выход и подключить его.

В противном случае, возможно, создайте его экземпляр с помощью [... initWithNibName:] из пера, а не просто [... init], а затем (в любом случае) нажмите экземплярный экземпляр контроллера представления, используя [self.navigationController pushViewController:viewB animated:YES], или представив его модально, как вы, кажется, освоили уже.

В качестве sidenote, возможно, назовите переменную viewcontroller viewConB, поскольку существует четкое и важное различие между представлениями и представлениями controllers . Кроме того, имена классов обычно начинаются с прописных букв, а переменные строчными, чтобы все было понятно.

...