无法在TabBarController中包含的视图控制器之间传输数据

时间:2012-08-28 07:39:58

标签: objective-c ios tabbarcontroller

这是我的第一个问题,我在编程领域非常新。我有一个标签栏控制器,我想将数据从FVC(第一视图控制器)传输到SVC(第二个视图控制器)。在FVC中,我将控制器中包含的控制器放在一个数组(VCArray)中,并将该数组的第二个对象分配给SVC的实例,并使用适当的FVC数据设置SVC的属性,但这些属性在SVC中显示为零。

还有一个有趣的事情是,当我用[isOFKindClass SVC]和[isOFKindClass FVC]检查被指定为VCArray的第二个对象的SVC实例时,两者都实现了......怎么可能?一个对象可以有两个类?如果我检查[isOfKIndClass NSArray]它就会出现错误。这意味着实现中没有任何错误。

抱歉我的英语不好..:p

1 个答案:

答案 0 :(得分:0)

part1的答案是你需要在SVC上公开属性,以便另一个类可以访问它们,而FVC需要导入svc的接口文件(.h)。因此,您几乎总是需要做两件事:找到要更改的类的方法,以及该类的接口。该物业将如下所示:

SVC.h:
@property (nonatomic, strong) NSString *title;
- (void)doSomething;

FVC:
#import "SVC.h"

SVC *svc = ...; // get a reference to it
svc.title = @"Howdie!";
[svc doSomething]; // tell the class to use the title you just set, for example

要回答第二个问题,有两种类型的“is ..”方法,isKindOfClass和isMemberOfClass。第一个说是当前对象是提供的类的类型,或任何超类。如果该类实际上是一个确切的成员,则第二个只通过。例如:

NSMutableData *data;
[data isKindOfClass:[NSData class]] == YES
[data isKindOfClass:[NSMutableData class]] == YES

[data isMemeberOfClass:[NSData class]] == NO
[data isMemeberOfClass:[NSMutableData class]] == YES

编辑:所以数据永远不会进入SVC。试试这个 - 一个属性只是一个快捷方式,有一个ivar,一个吸气剂,(通常)一个二传手。你实际上可以提供自己的二传手。所以你说(使用上面的例子),在SVC标题中总是为零,即使它是由SVC设置的。这种情况只有三个原因:

  • FVC有一个对另一个对象的引用,但实际上你称它为SVC所以当设置该值时,它设置为另一个类而不是SVC

  • 当FVC设置值时,SVC是一个零对象(ObjectiveC将消息处理为nil就好了,所以你不会在控制台上看到任何错误)

  • 在viewWillAppear

  • 中,SVC已将值重置为nil un younownst

所以你可以找到它的方法是覆盖变量setter(再次使用我的例子):

- (void)setTitle:(NSString *)val
{
  title = val; // ARC way
  NSLog(@"SVC - just set title to %@", title);
}

将此添加到SVC,看看会发生什么。