我有4个类,即我的应用程序中的视图。 A类,变量a和b。
单击A类视图A上的按钮后,它将进入B类,即表视图控制器。然后B级导致C级,然后C级导致D级。
现在我想要访问类A的a和b的值到D类。我尝试使用NSNotification但没有成功。
请建议。
我试过NSNotification:
我尝试过类似A的NSNotification ---
-(IBAction) selectButton:(id) sender{
NSString * a = [NSString stringWithFormat:@"Manjinder singh"];
NSDictionary * dict = [NSDictionary dictionaryWithObject:a forKey:@"1"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"sendMessage" object:self userInfo:dict];
}
然后D级----
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sendMessage:) name:@"sendMessage" object:nil];
}
return self;
}
-(void)sendMessage:(NSNotification *)notification{
A *dil=[[A alloc] init];
nslog(@"dil.a");
NSLog(@"USERINFO:MyUserInfo (its a dictionary):%@",[[notification userInfo] valueForKey:@"1"]);
}
这是rendom try,但基本上我想在A类中显示A类变量a和b。
更新:------------ MyCoolViewController.h //从
发送数据的类@protocol MyCoolViewDelegate;
@interface MyCoolViewController : UIViewController {
id <MyCoolViewDelegate> delegate;//
}
@property (nonatomic, assign) id delegate;//
@end
@protocol MyCoolViewDelegate <NSObject>//
-(void)sendAStringToAnotherView:(NSString*)string;
@end
MyCoolViewController.m
-(void)viewDidLoad{
[delegate sendAStringToAnotherView:@"this is a string"];
}
firstViewController.m //a class where data sent
-(void)viewDidLoad{
MyCoolViewController *myViewControllerPointer=[[MyCoolViewController alloc] init];
myViewControllerPointer.delegate = self;//
}
-(void)sendAStringToAnotherView:(NSString*)string
{
//displays the string as console output
NSLog(@"plzzzzzz show data",string);
}
string的值未传递给此类,因为它未在NSLog输出中显示。 更新2 ---
MyCoolViewController.m
#import “MyCoolViewController.h”
#import "firstViewController.h"
@implementation MyCoolViewController
@synthesize label1,sttr;
@synthesize delegate;//
-(IBAction) selectButton:(id) sender{
if (curri==nil) {
curri=[[CurrancyViewController alloc] initWithNibName:nil bundle:nil];
[self.navigationController pushViewController:curri animated:YES];
}
curri=nil;
//CHECK ThIS [curri release];
}
- (void)viewDidLoad
{
[delegate sendAStringToAnotherView:@"this is a string"];
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"background1.png"]];
[super viewDidLoad];
}
- (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
@end
答案 0 :(得分:2)
你可以在这里使用委托
D将成为A的委托,当您单击该按钮时,A会向D发送一条消息,其中变量作为参数,D通过执行方法进行响应。
答案 1 :(得分:2)
您能否提供更多有关您要实现的具体内容的背景信息?听起来你想要在几个UIViewController
之间传递数据。以下是如何为其中一个视图控制器设置委托:
#import <UIKit/UIKit.h>
@protocol MyCoolViewControllerDelegate;
@interface MyCoolViewController : UIViewController {
id <MyCoolViewControllerDelegate> delegate;
}
@property (nonatomic, assign) id delegate;
@end
@protocol MyCoolViewControllerDelegate <NSObject>
-(void)sendAStringToAnotherView:(NSString*)string;
@end
然后你应该合成代表
@synthesize delegate;
然后当你想传递数据时,让我们说一个父视图,调用这个函数:
[delegate sendAStringToAnotherView:@"this is a string"];
在另一个视图控制器中,无论您在何处实例化此UIViewController的实例,都需要将该self设置为委托;
myViewControllerPointer.delegate = self;
然后在父视图控制器中实现委托函数。
-(void)sendAStringToAnotherView:(NSString*)string
{
//displays the string as console output
NSLog(string);
}
您需要在此类视图之间进行通信,这可能意味着您可以更有效地构建应用。没有更多信息,不能肯定地说。
尝试并使用此模板将委托添加到您自己的应用中。