IOS:如何在ios中将值从一个类传递到另一个类

时间:2013-11-28 04:11:15

标签: ios objective-c

我是IOS的新手。我的第一个类是ViewController。我想将user_id从这个类传递给snsViewController类。但是当我使用@property时,我得到空值。

我在snsViewController.m中编写此代码

   ViewController *objViewController=[[ViewController alloc]initWithNibName:@"ViewController" bundle:nil];
   [objViewController jsonPost:getpostJson];

Plz建议我解决这个问题

我已在ViewController.m中编写此代码

  -(void)connectionDidFinishLoading:(NSURLConnection *)connection
    {
     respstring = [[NSString alloc]initWithData:loginJsonData  encoding:NSUTF8StringEncoding];
     NSLog(@"*******: %@",respstring);
     SBJsonParser *objSBJsonParser = [[SBJsonParser alloc]init];
      json = [[NSDictionary alloc]initWithDictionary:[objSBJsonParser   objectWithString:respstring]];
       NSLog(@"json: %@",json);
      /}
      //-(void)loginjonresponse
        // {

           NSNumber *error = [json objectForKey:@"error"];
              if([error intValue] == 0)
        {
              NSLog(@"u r connected with webserver ");
             }
           else
           {
               NSLog(@"connection fail");
     }

      NSString *value=[json objectForKey:@"value"];
        NSLog(@"value: %@",value);
           if (value ==(id)[NSNull null] || value==nil)
            {
             NSLog(@"login fail");

             }
        else
          {
             NSString *user_details=[[json objectForKey:@"value"]objectForKey:@"user"];
           // NSLog(@"user_deails%@",user_details);
            if ([user_details isEqual:@"false"])
             {
                 [self alertStatus:@"Please enter correct username and password" :@"Login Failed!"];
                    NSLog(@"incorrect user name password");

             }
           else
               {

                user_id=[[[json objectForKey:@"value"]objectForKey:@"user"]objectForKey:@"id"];
               NSLog(@"user_id: %@",user_id);
                firstname=[[[json  objectForKey:@"value"]objectForKey:@"user"]objectForKey:@"firstname"];
                NSLog(@"firstname: %@",firstname);
             lastname=[[[json objectForKey:@"value"]objectForKey:@"user"]objectForKey:@"lastname"];
                 NSLog(@"lastname: %@",lastname);
                 email=[[[json objectForKey:@"value"]objectForKey:@"user"]objectForKey:@"email"];
                NSLog(@"email: %@",email);
              currentroll_id=[[[json objectForKey:@"value"]objectForKey:@"user"]objectForKey:@"current_roll_id"];
               NSLog(@"current_roll_id: %@",currentroll_id);
                  currentcourse_id=[[[json objectForKey:@"value"]objectForKey:@"user"]objectForKey:@"current_course_id"];
                  NSLog(@"current_course_id: %@",currentcourse_id);

                  // [self classlist];



           #pragma After successful login move to sns page
              snsViewController *objsnsViewController=[[snsViewController alloc]initWithNibName:@"snsViewController" bundle:nil];


                 [self.view addSubview:objsnsViewController.view];

             }

           }

}

在这段代码中我得到了user_id值。我想把这个值传递给snsViewController。

2 个答案:

答案 0 :(得分:1)

在snsViewController.h文件中获取另一个实例变量并赋予其属性。例如

.h file
NSString *userID;
@property (nonatomic,retain) NSString *userID;

.m file
@synthesize userID

然后在这段代码中

#pragma After successful login move to sns page
              snsViewController *objsnsViewController=[[snsViewController alloc]initWithNibName:@"snsViewController" bundle:nil];

objsnsViewController.userID = user_id;
                 [self.view addSubview:objsnsViewController.view];

答案 1 :(得分:1)

There are many ways you can pass the data from one class to another.
For example lets say one is your model class and two other class is your 
viewController class.

现在这是你的模型类,你需要在其中声明访问器方法和指定的初始化器: -

@interface yourmodel : NSObject
@property (nonatomic, strong)NSString *title;
-(id)initWithTitle:(NSString*)title

@implementation yourmodel
-(id)initWithTitle:(NSString*)title
{
    self=[super init];
       if (self)
       {
           self.title=title;
        }
        return self;
}
@end

这是你的firstViewController类,你将把数据发送到第二个视图控制器: -

@class yourmodel
@interface yourFirstViewController : UIViewController
@property (nonatomic,strong)yourmodel *dataModel;
@property (nonatomic,strong)NSMutableArray *yourArray;

 @implementation yourFirstViewController
- (void)viewDidLoad
{
yourmodel *model=[[yourmodel alloc] initWithTitle:@"yourString"];
[yourArray addObject:model];
}

//假设这是第一个视图控制器的tableview委托方法 您要将数据发送到第二个视图控制器

- (void)tableView:(UITableView *)tableView 
didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
        yourSecondViewController *secondcontroller = [[yourSecondViewController alloc] initWithNibName:
@"yourSecondViewController" bundle:nil];
    secondcontroller.dataModel=[self.yourArray objectAtIndex:indexPath.row];
}
@end

现在,这是第二个视图控制器,您需要第一个视图控制器的数据: -

 @class yourmodel
    @interface yourSecondViewController : UIViewController
    @property (nonatomic,strong)yourmodel *dataModel;

     @implementation yourSecondViewController
    - (void)viewDidLoad
    {
     NSLog(@"dataModel.title=%@",self.dataModel.title);
    }

注意: - 在每个视图控制器中,您需要对模型类的引用进行decalare以接收数据。