如何在iphone中将数据从第二类发送到第一类

时间:2011-09-19 05:22:44

标签: iphone objective-c

我尝试将一个单元格交换为其他单元格的值,但我的值不是正确传输因为我的值是将第二类传递给第一类但是字符串值没有通过数组引用为什么我的代码中的错误是什么你能帮我吗  为此,我创建委托方法 这是我的originstart.h文件

import

#import "RegexKitLiteDemoAppDelegate.h"
@class airport;
@protocol OriginstartDelegate <NSObject>
@required
- (void)Originstart:(NSString *)Origin forIndexPath:(NSIndexPath *)indexPath;

@end

@interface Originstart : UITableViewController {
    RegexKitLiteDemoAppDelegate *app;
    airport *selectedAirport;
}
@property(nonatomic,retain)NSString*name;
@property(nonatomic,retain)airport *selectedAirport;
@property (nonatomic, copy) NSIndexPath *indexPathToChange;
@property (nonatomic, assign) id<OriginstartDelegate> delegate;
@end

这是我的orginestart.m文件

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.
    return app.lstAirports.count;
}


// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
    }

    airport* a=(airport*)[app.lstAirports objectAtIndex:indexPath.row];
    NSLog(@"str:%@",a);
    cell.textLabel.text =a.Name;
    cell.detailTextLabel.text=a.Code;
    // Configure the cell...

    return cell;
}


#pragma mark -
#pragma mark Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    NSString *newStation = [[app.lstAirports objectAtIndex:indexPath.row]description];
    [delegate Originstart:newStation  forIndexPath:self.indexPathToChange];
    [self.navigationController popViewControllerAnimated:YES];

                 }

这是我的Tfirst.m文件

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"accessory selected");


    if ([indexPath section] == 0)
    {
       // load the appropriate view for the accessory selected
        if ([indexPath row] == 0)
        {

            Originstart *viewtwo = [[Originstart alloc] initWithStyle:UITableViewStyleGrouped];
            viewtwo.indexPathToChange = indexPath;
            viewtwo.delegate = self;
            [self.navigationController pushViewController:viewtwo animated:YES];
            [viewtwo release];

        }
        else{
            NSLog(@"accessory right");
            }       
    }
}


#pragma mark - Delegate protocol method

- (void)Originstart:(NSString *)Origin forIndexPath:(NSIndexPath *)indexPath {

    [datasource replaceObjectAtIndex:indexPath.row withObject:Origin];
    [self.tableView reloadData];
}

这是我的airport.h文件,其中我创建了两个字符串变量和一个数组以获取值,并在带有名称和代码的originstart类中显示我在这里写的类

originstart.m  airport* a=(airport*)[app.lstAirports objectAtIndex:indexPath.row];
    NSLog(@"str:%@",a);
    cell.textLabel.text =a.Name;
    cell.detailTextLabel.text=a.Code;
and final this class arport class

//
//  airport.h
//  RegexKitLiteDemo
//
//  Created by pradeep.yadav on 9/13/11.
//  Copyright 2011 __MyCompanyName__. All rights reserved.
//

#import <Foundation/Foundation.h>


@interface airport : NSObject {
    NSString *Code;
    NSString *Name;
    NSArray *DestinationAirports;

}
@property(nonatomic,retain)NSString *Code;
@property(nonatomic,retain)NSString *Name;
@property(nonatomic,retain)NSArray *DestinationAirports;
@end

2 个答案:

答案 0 :(得分:1)

要实现您想要的,请尝试以下步骤:

1.首先,在第二堂课中创建头等舱的属性。

2.在第一个类中,将这些变量或对象创建为要从第二个类传递数据的属性。

3.(希望您正在使用基于导航控制器的应用程序)在从第一个视图控制器推送到第二个视图控制器时,您创建第二个类的实例并将其传递给pushViewController方法。添加以下代码行.......

secondViewObj.firstView=self; 

其中secondViewObj是secondViewController类的实例,firstView是在第二个类中声明的属性。

4.当你想要将数据传递给第一类时,在第二课中,只需添加以下代码行:

firstView.dataMember1=value;

其中dataMember1是作为第2点中提到的属性创建的变量或对象。希望这会有所帮助。

在FirstViewController类中,你推送到SecondviewController有以下代码:

    SecondViewController *svc = [SecondViewController alloc]init];
    svc.vc = self; 
    [self.navigationController pushViewController:svc animated:YES];

并且还为要传递给firstView Controller的数据声明了一个属性。

在这种情况下,它将是一个整数变量。

@property (nonatomic) int selectedValue and also synthesize it.

现在在secondViewController中,为这个

声明firstViewController的属性
@property (nonatomic, retain) FirstViewController *vc; and synthesize it.

你想将数据传递给FirstViewController的地方有以下代码,

vc.selectedValue = 1;

现在在弹出第一个ViewController之后,如果你知道selectedValue变量的值,你会发现该值已经从第二个传递到第一个。

希望这会有所帮助..

答案 1 :(得分:0)

最简单的方法是在FirstViewController中设置一个对象

SecondViewController

FirstViewController * instanceOfFirstView;

@property(nonatomic,retain)FirstViewController * instanceOfFirstView;

@synthesize instanceOfFirstView;

[instanceOfFirstView setValueNeedTobeBroughtFromSecondView:@“VAlue set”]

FirstViewController

NSString * valueNeedTobeBroughtFromSecondView;

@property(nonatomic,retain)NSString * valueNeedTobeBroughtFromSecondView;

@synthesize valueNeedTobeBroughtFromSecondView;

SecondViewController * aSecondViewController = [[SecondViewController alloc] init];

[aSecondViewController setInstanceOfFirstView:self];