iPhone应用程序访问来自不同类的数据值

时间:2011-08-27 21:58:17

标签: iphone objective-c

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

2 个答案:

答案 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);
}

您需要在此类视图之间进行通信,这可能意味着您可以更有效地构建应用。没有更多信息,不能肯定地说。

尝试并使用此模板将委托添加到您自己的应用中。