iOS 推送场景时情节提要破坏变量?为什么?应该怎么做?

iOS Storyboard clobbering variables when pushing scenes? Why? How should it be done?

我的 iOS 项目中有以下故事板配置。

storyboard1->NavController-sceneA->stoyboard2/initialview

故事板2->场景B->场景C

-> 是 "show" 转场 场景 A 加载故事板并将其推送到其导航控制器上。

两个class的实现如下

//ClassX.h//
@interface ClassX : UITableViewController

//ClassX.m//
@implementation ClassX
NSArray* model;

//..
@end


//ClassY.h//
@interface ClassY : UITableViewController

//ClassY.m//
@implementation ClassY
NSArray* model;

//..
@end

问题是,当我尝试加载场景 C 时,它会尝试在其实现中使用名为 "model" 的字段——但出于某种原因获取场景 A 的模型字段。为什么会这样,我应该如何纠正它?

您应该使模型成为 class 的 属性,而不是像您那样声明它们。他们可能正在创建全局变量。或者在 @implementation 之后在 {} 中声明它们,以确保它们是属于 class.

的变量

所以要么:

@implementation{
  NSArray *model
}
...
@end

或更好地使用私有属性并在代码中使用self.model。:

所以在 classY.m 尝试:

@interface ClassY ()
   @property NSArray *model;
@end

@implementation ClassY
...
@end

对 ClassX 做同样的事情。