objective-c - 在 WatchKit 的 presentControllerWithNames 中将自身作为上下文传递

标签 objective-c watchkit

在我展示的界面 Controller 中,我有以下代码:

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

我想做的是将传递的上下文设置为我的模态分页界面 Controller 每个页面上的委托(delegate)属性,如下所示:

#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,因此我无法为这些页面设置委托(delegate)属性。我做错了什么,还是这只是 WatchKit 的一个错误?

最佳答案

我知道不久前有人问过这个问题,但值得发布一个解决方案。

我相信这是 Beta 3 及更早版本中的 WatchKit 错误。

我发现的唯一方法是在数组中传递参数。

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

好像只是根除重复的上下文,所以需要不一样。我的接口(interface) Controller 代码被设置为检查上下文是否为数组并枚举以查找第一个非 NSNumber 实例。

This Apple dev forums post解释相同的解决方案,后续消息表明此问题已在 Beta 4 中修复。

关于objective-c - 在 WatchKit 的 presentControllerWithNames 中将自身作为上下文传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27136032/

相关文章:

ios - 使用节标题删除 TableView 中的行

ios - watchkit 中的 LongPressGestureRecognizer

ios - WCSession 激活 session 不调用委托(delegate)方法

iphone - CoreMotion - 磁场始终为 0

ios - 检测 iOS 键盘上的 Shift + Enter

objective-c - [NSManagedObject 打招呼] : unrecognized selector sent to instance 0x

ios - SwiftUI:如果在 ForEach 中使用,NavigationLink 会立即弹出

storyboard - Apple watch : How to scroll only table contents, 而不是整个 watch 用户界面?

ios - watch 应用程序终止时 WatchConnectivity transferUserInfo 不起作用

ios - 在AVAudioPlayer中停止声音并显示AQDefaultDevice(173):跳过输入流错误日志