在Xcode中的类之间简单传递变量

时间:2012-05-18 08:39:41

标签: objective-c ios xcode class

我正在尝试使用ios应用程序,但我坚持在类之间传递数据。 这是我的第二个应用程序。第一个是全球级的,但现在我需要 多个班级。我尝试了很多教程,但是没有用,或者传递的值总是为零。有人可以给我写一个简单的应用程序,以证明在IOS 5中传递变量。 没什么特别的,故事板连两个视图控制器,一个变量。

感谢您的帮助。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Navigation logic may go here. Create and push another view controller.

            FirstViewController *fv;
            fv.value = indexPath.row;

            NSLog(@"The current %d", fv.value);

            FirstViewController *detail =[self.storyboard instantiateViewControllerWithIdentifier:@"Detail"];
            [self.navigationController pushViewController:detail animated:YES]; 

}

这是我的主视图中的代码,我需要发送indexPath.row或我按下的单元格的索引到下一个视图

3 个答案:

答案 0 :(得分:12)

有几件事要做。根据应用程序的不同,您可以向AppDelegate类添加一个变量,使其通过共享实例可用于所有类。最常见的事情(我认为)是制作一个单身人士。为了实现这一点,您可以创建一个类,比如说StoreVars,以及一个返回该对象的静态方法,这使得该类成为“全局”。在该方法中,您可以像往常一样初始化所有变量。然后,您可以随时随地与他们联系。

@interface StoreVars : NSObject

@property (nonatomic) NSArray * mySharedArray;
+ (StoreVars*) sharedInstance;

@implementation StoreVars
@synthesize mySharedArray;

+ (StoreVars*) sharedInstance {
    static StoreVars *myInstance = nil;
    if (myInstance == nil) {
        myInstance = [[[self class] alloc] init];
        myInstance.mySharedArray = [NSArray arrayWithObject:@"Test"];
    }
    return myInstance;
}

这将成为一个单身人士。如果你记得在两个viewControllers中导入“StoreVars.h”,你可以像这样访问现在共享的数组;

[StoreVars sharedInstance].mySharedArray;
               ^

这是一个返回StoreVars对象的方法。在StoreVars类中,您可以实现任何对象并在静态方法中对其进行初始化。只需要记住初始化它,否则,你的所有对象都将是0 / nil。

如果你不是UINavigationController的粉丝而宁愿使用segues,那么它会更容易,但可以让你的应用程序变得“混乱”。在UIViewController中实现了一个你应该重载的方法:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Make sure your segue name in storyboard is the same as this line
    if ([[segue identifier] isEqualToString:@"YOUR_SEGUE_NAME_HERE"])
    {
        // Get reference to the destination view controller
        YourViewController *vc = [segue destinationViewController];

        // Pass any objects to the view controller here, like...
        [vc setMyObjectHere:object];
    }
}

来源:How to pass prepareForSegue: an object

在提出这样的问题之前做一些研究。阅读一些教程,然后自己尝试,然后提出与您真正想要的相关的问题。并不是每天都有人想为你做所有的工作,但有时候你很幸运。就像今天一样。

干杯。

答案 1 :(得分:1)

如果在2个控制器之间使用segue,则必须覆盖prepareForSegue方法

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// check if it's the good segue with the identifier
if([[segue identifier] isEqualToString:@"blablabla"])
{
    // permit you to get the destination segue
    [segue destinationViewController];
    // then you can set what you want in your destination controller
}
}

答案 2 :(得分:1)

你遇到的问题对初学者来说非常困惑。错误地“解决”会导致学习大量不良习惯 请查看Ole Begemann关于Passing Data Between View Controllers的精彩教程 - 这真的值得一读。