gpt4 book ai didi

ios - 从 NSObject 类更改 UISwitch 的状态

转载 作者:行者123 更新时间:2023-11-28 18:19:50 26 4
gpt4 key购买 nike

我无法访问我的标签、 slider 和开关,它们都在我的 NSData 类的 UIViewController 中。

到目前为止,这是我的代码:

FirstViewController.h

@interface FirstViewController : UIViewController 
@property (strong) IBOutlet UISwitch * mySwitch;
@property (strong) IBOutlet UISlider *myTransitionSlide;
@property (nonatomic,retain) IBOutlet UILabel *labelTest;

myNSDataClass.h

#import <Foundation/Foundation.h>
#import <CoreBluetooth/CoreBluetooth.h>
@class FirstViewController;


@interface myNSDataClass : NSObject <UIApplicationDelegate,CBPeripheralManagerDelegate>
{
FirstViewController *firstViewController;
}
@property (nonatomic, retain) FirstViewController *firstViewController;

myNSDataClass.m

- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveWriteRequests:(NSArray *)requests
{
self.firstViewController = [[FirstViewController alloc]init];
[[self.firstViewController labelTest]setText:@"text changed"];
[self.firstViewController.myTransitionSlide setValue:1];
[self.firstViewController.mySwitch setOn:NO animated:YES];
}

我知道问题出在 FirstViewController 的重新分配上,但我不知道该怎么办。

最佳答案

除了从拥有它们的 View Controller 之外,您不应该从其他任何地方访问您的 socket 。此外,您可能希望让您的 socket 变弱

要解决您的问题,您可以使用通知:

- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveWriteRequests:(NSArray *)requests
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"MyAppDidReceiveWriteRequestNotification"
object:nil
userInfo:@{@"text": @"text changed", @"switchOn": @(NO)}];
}

然后,在您的 FirstViewController 中,您将自己注册为该通知的观察者,例如在 viewDidLoad 中:

- (void)viewDidLoad
{
[super viewDidLoad];

[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleDidReceiveWriteRequestNotification:)
name:@"MyAppDidReceiveWriteRequestNotification"
object:nil];

}

然后您实现处理程序:

- (void)handleDidReceiveWriteRequestNotification:(NSNotification *)note
{
[self.labelTest setText:note.userInfo[@"text"]];
[self.mySwitch setOn:[note.userInfo[@"switchOn"] boolValue] animated:YES];
}

然后你清理:

- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}

就是这样。干净多了。

此外,您还希望将通知的名称和 userInfo 字典键的名称转换为常量,这样代码中的多个位置就不会出现相同的字符串文字。

关于ios - 从 NSObject 类更改 UISwitch 的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22661510/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com