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 加载故事板并将其推送到其导航控制器上。
- 场景 A 有一个实例 class X 的控制器。
- 场景B使用默认的UIViewControolerClass.
- SceneC 有一个控制器
实例 class Y.
两个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 做同样的事情。
我的 iOS 项目中有以下故事板配置。
storyboard1->NavController-sceneA->stoyboard2/initialview
故事板2->场景B->场景C
-> 是 "show" 转场 场景 A 加载故事板并将其推送到其导航控制器上。
- 场景 A 有一个实例 class X 的控制器。
- 场景B使用默认的UIViewControolerClass.
- SceneC 有一个控制器 实例 class Y.
两个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 做同样的事情。