我希望有一个自定义initWithNibName
,基本上传入另一个NSString
作为类型,根据类型确定此UIViewController
内的一些逻辑。所以我设置如下:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil andFeedType:(NSString *)feedType
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
这甚至有意义吗?因为我没有经常看到这种类型的init。如果没有,那么最好的方法是什么?
答案 0 :(得分:2)
这对我来说非常有意义。这是覆盖初始化程序以在Objective-C中添加一些自定义初始化的方法。你认为它有什么问题?
答案 1 :(得分:2)
是的,这是有道理的。此外,如果您想保持初始化,可以执行以下操作:
- (id)initWithFeedType:(NSString *)feedType
{
self = [super initWithNibName:@"YourNibName" bundle:nil]; // nil is ok if the nib is included in the main bundle
if (self) {
// Set your feed here (copy it since you are using a string)
// see the edit
myFeedType = [feedType copy];
}
return self;
}
有关详细信息,请参阅 Ole Begemann撰写的帖子initWithNibName-bundle-breaks-encapsulation。
希望有所帮助。
修改强>
如果外部对象无法访问该Feed属性,请为您的控制器创建类扩展,如下所示:
//.m
@interface YourController ()
@property (nonatomic, copy) NSString* myFeedType;
@end
@implementation YourController
@synthesize myFeedType;
@end
答案 2 :(得分:1)
确实有意义。您正在创建自己的初始化程序,根据您的需求量身定制。此外,您正在做您应该做的事情,即在您的自定义init方法中调用指定的初始值设定项(在UIViewController
initWithNibName:bundle:
的情况下)。
答案 3 :(得分:0)
等待!
有一个原因可能不是最佳:当从故事板加载视图控制器时,此方法不被调用。出于这个原因,我建议使用viewDidLoad:
代替自定义逻辑,并将自定义字符串设置为属性。