4

提示するインターフェイス コントローラーには、次のコードがあります。

- (IBAction)showModal {
    NSArray *namesArray = @[@"A", @"B", @"C"];
    NSArray *contextsArray = @[self, self, self];
    [self presentControllerWithNames:namesArray contexts:contextsArray];
}

私がやりたいことは、次のように、渡されたコンテキストをモーダル ページ インターフェイス コントローラーの各ページのデリゲート プロパティとして設定することです。

#import "ModalPageInterfaceController.h"

@interface ModalPageInterfaceController ()

@property (nonatomic, weak) id delegate;

@end

@implementation ModalPageInterfaceController

- (instancetype)initWithContext:(id)context {
    self = [super initWithContext:context];
    if (self) {
        self.delegate = context;
    }
    return self;
}

@end

しかし、私が見つけたのは、initWithContext:が呼び出されたときに最初のページを除くすべてのコンテキスト引数が nil であるため、それらのページにデリゲート プロパティを設定できないことです。私は何か間違ったことをしていますか、それとも単なる WatchKit のバグですか?

4

3 に答える 3

1

これは少し前に尋ねられたことに気づきましたが、解決策を投稿する価値があります。

これは Beta 3 以前の WatchKit のバグだと思います。

私が見つけた唯一の方法は、配列内で引数を渡すことでした。

[self presentControllerWithNames:@[@"First", @"Second", @"Third"],
    contexts:@[@[self], @[@0, self], @[@0, @1, self]]];

繰り返されるコンテキストを根絶するだけのように見えるので、異なる必要があります。私のインターフェイス コントローラー コードは、コンテキストが配列であるかどうかを確認し、列挙して最初の非 NSNumber インスタンスを見つけるように設定されています。

この Apple dev フォーラムの投稿では、同じ解決策が説明されており、フォローアップ メッセージは、これが Beta 4 で修正されたことを示しています。

于 2015-01-13T23:39:31.573 に答える
0

元のコンテキストへの弱い参照を保持しています。おそらく、それは割り当て解除されていますか?試す:

@property (nonatomic, strong) id delegate;
于 2015-01-07T21:53:11.780 に答える
0

スウィフト: 使用awakeWithContext

発信者:

self.presentControllerWithName("name", context: self)

呼び出し先:

var delegate:AnyObject? = nil
    override func awakeWithContext(context: AnyObject?) {
        self.delegate = context
    }
于 2015-06-05T00:43:00.353 に答える