2

基本的に、タイプに基づいてthis 内のいくつかのロジックを決定するために、タイプとしてinitWithNibName別のものを渡すcustom が必要です。だから私は次のように設定しました:NSStringUIViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil andFeedType:(NSString *)feedType
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

これは意味がありますか?このタイプの初期化はあまり見られないので。そうでない場合、これを行う最善の方法は何ですか?

4

4 に答える 4

2

はい、それは理にかなっています。さらに、init をきれいに保ちたい場合は、次のようにします。

- (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の投稿を参照してください

それが役立つことを願っています。

編集

そのフィード プロパティに外部オブジェクトからアクセスできない場合は、次のようなコントローラーのクラス拡張を作成します。

//.m
@interface YourController ()

@property (nonatomic, copy) NSString* myFeedType;

@end

@implementation YourController

@synthesize myFeedType;

@end
于 2012-06-19T20:21:17.483 に答える
2

それは私にとって完全に理にかなっています。これは、初期化子をオーバーライドして、Objective-C でカスタムの初期化を追加する方法です。何が悪いと思いますか?

于 2012-06-19T20:16:41.483 に答える
1

それは理にかなっています。ニーズに合わせて独自のイニシャライザを作成しています。UIViewController initWithNibName:bundle:また、カスタム init メソッド内で指定されたイニシャライザ (の場合) を呼び出す必要があります。

于 2012-06-19T20:16:12.060 に答える
0

待って!最適ではない理由が 1 つあります。このメソッドは、ビュー コントローラーがストーリーボードから読み込まれるときに呼び出されません。このためviewDidLoad:、代わりにカスタム ロジックを使用し、カスタム文字列をプロパティとして設定することをお勧めします。

于 2012-06-19T20:19:59.747 に答える