Ios - 两个ViewController之间的PrepareforSegue,但两者之间有另一个Viewcontroller

时间:2014-01-19 10:50:25

标签: ios objective-c

我有三个ViewController A,B和C.

我想将数据从A传递给C. 但是当用户使用我的应用程序时,他必须在C ViewController之前通过B ViewController。 而segue标识符介于A和B之间。

ViewController A和C未在Storyboard中链接。可能是问题......

我试试这个,但是Xcode没有识别ViewController C中的变量ndj2。

我放了正确的#import ViewControllerC.h

我已经尝试在A和B之间传递日期,并且它正在工作。 避免做两个prepareForSegue(一个在ViewController A和ViewController B /之间,另一个在ViewController B和ViewController C之间)

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

   ViewControllerA *transferViewController = segue.destinationViewController;

       NSLog(@"prepareForSegue: %@", segue.identifier);
       if([segue.identifier isEqualToString:@"quelnom"]) // identifier between A and B
      {

           transferViewController.ndj2 = ndj;
      // ndj2 is variable present in ViewController C
      }
   };

真正的问题是ndj2无法识别,我正确地宣布了它。它是Viewcontroller的问题,但我不明白为什么......

3 个答案:

答案 0 :(得分:0)

在C ViewController中,你将ndj2初始化为@property  和 ViewControllerC * transferViewController = segue.destinationViewController;

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
       NSLog(@"prepareForSegue: %@", segue.identifier);
       if([segue.identifier isEqualToString:@"quelnom"]) // identifier between A and B
      {
           ViewControllerC *transferViewController = segue.destinationViewController;
           transferViewController.ndj2 = ndj;
      // ndj2 is variable present in ViewController C
      }
};

答案 1 :(得分:0)

如果在ndj2ViewControllerB中将ViewControllerC声明为属性,并且这两个ViewController也通过segue连接,那么您只需要初始化ViewControllerC.ndj2在ViewControllerB的prepareForSegue方法中,就像在ViewControllerA中一样。

现在您只初始化ViewControllerB.ndj2,但不会自动传递给ViewControllerC

答案 2 :(得分:0)

可能你需要研究如何使用单例对象以一种整洁的方式在视图之间传输数据..例如我使用这个

for propertyManager.h

#import <Foundation/Foundation.h>

@interface PropertyManager : NSObject{

}
+ (PropertyManager*) sharedPropertyManager;


@property(nonatomic,retain)NSString* chapterId;
@property(nonatomic,retain)NSString* chapterName;
@property(nonatomic,retain)NSString * clicked;

@end

和.m文件

#import "PropertyManager.h"

@implementation PropertyManager
static PropertyManager* _sharedPropertyManager = nil;

+ (PropertyManager*) sharedPropertyManager{
    @synchronized([PropertyManager class]){

        if (!_sharedPropertyManager) {
            [[self alloc] init];
        }
        return _sharedPropertyManager;
    }
    return nil;
}

+ (id) alloc{
    @synchronized([PropertyManager class]){
        NSAssert(_sharedPropertyManager==nil,@"Attempted to allocate a second instance of the PropertyManager");
        _sharedPropertyManager = [super alloc];
        return _sharedPropertyManager;
    }
    return nil;
}

- (id) init{
    self = [super init];

    if (self != nil) {
        NSLog(@"Singleton PropertyManager is Running");

    }
    return self;
}
@end

当您需要将视图中的数据放入视图时,您只需使用

[[PropertyManager sharedPropertyManager]setChapterId:"1"];

并通过

获取任何其他视图
[[PropertyManager sharedPropertyManager]chapterId];