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 开发者论坛帖子解释了相同的解决方案,后续消息表明此问题已在 Beta 4 中得到修复。

于 2015-01-13T23:39:31.573 回答
0

You are holding a weak reference to your originating context. Perhaps it is being deallocated? Try:

@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 回答