Obj-C在类之间发送消息

时间:2011-01-09 19:38:25

标签: iphone objective-c sdk messages

我是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

成功记录YES,但标签的文本不会更改。我已经确定了 我在Interface Builder中的所有连接都是正确的,实际上还有其他(IBAction) 我的程序中的方法更改了这个标签的文本,所有其他方法都完美地工作......

任何想法,伙计们?你不需要给我一个完整的解决方案,任何信息都会有所帮助。感谢。

1 个答案:

答案 0 :(得分:1)

使用

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

您正在实例化新的viewControllerB。这不是你在nib文件中拥有的viewControllerB(我猜)。你应该为它做一个出口并连接它。

否则,可能使用来自nib的[... initWithNibName:]实例化它,而不仅仅是[... init],然后(以任何一种方式)使用[self.navigationController pushViewController:viewB animated:YES]推送实例化的视图控制器,或者以模态方式呈现它因为你似乎已经掌握了。

作为旁注,可能将viewcontroller变量命名为viewConB,因为视图和视图控制器之间存在明显且重要的区别。此外,类名往往以大写字母开头,变量以小写字母开头,以保持清晰。