我是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 but it is not the problem with my code
[self dismissModalViewControllerAnimated:YES];
}
- (void)dealloc {
[super dealloc];
}
@end
viewControllerB.h
#import <UIKit/UIKit.h>
@interface viewControllerB : UIViewController
{
IBOutlet UILabel *label;
}
- (void)display:(int)myNum;
@end
viewControllerB.m
#import "viewControllerB.h"
#import "viewControllerA.h"
@implementation viewControllerB
- (void)display:(int)myNum {
NSLog(@"YES");
[label setText:[NSString stringWithFormat:@"%d", myNum]];
}
@end
成功记录YES,但标签的文本不会更改。可以发送消息 访问实例变量还是什么?
感谢。
答案 0 :(得分:1)
将所有int替换为NSInteger.it将解决您的问题。
编辑:
好的,如果你有正确的连接。
实际上发生了什么,你从viewA调用show函数并尝试在此处加载该页面之前在viewB的标签上写入文本dats为什么你遇到问题。为了解决这个问题,你需要向viewB发送值和在viewDidLoad方法中将文本写在标签上。这将解决你的问题。
答案 1 :(得分:1)
以您尝试的方式发送消息没有任何问题。错误在于使用'int'作为类型。在Objective-C中使用NSInteger可以减轻许多麻烦。
答案 2 :(得分:1)
好像你的label
没有指向任何东西(所以当你告诉setText:
时,该消息只是被发送到nil
,因此没有任何反应。)< / p>
检查Interface Builder以确保您已将插座设置为实际指向视图中的标签。
答案 3 :(得分:1)
您的代码是否比您在此处显示的更多?我没有看到viewB是如何显示的 - 没有[self.view addSubview:viewB.view]或任何表明它将在视图中显示的内容。也许这就是问题?
答案 4 :(得分:0)
您能澄清一下您在这里做了什么,以及这些视图控制器如何与屏幕上的内容相关联?我的理解是viewControllerA被呈现为某种收集信息的模态对话框?它由viewControllerB呈现,当A关闭时B在屏幕上设置其标签以反映从A返回的值?
如果是这种情况,您需要在A中引用B,原因有两个。
- 首先,你在A的do
函数中输入B的一个实例并告诉它显示你的数字,但我没有看到你把B放在屏幕上的任何地方。
- 其次,在A上调用dismissModalViewControllerAnimated:
将不会关闭A,它将关闭A所呈现的模态视图控制器。所以要解雇A,你需要在B上说[self dismissModalViewControllerAnimated:YES];
。最好通过让A通知B它已经准备好关闭。