gpt4 book ai didi

ios - 在目标 Controller 中设置类的属性

转载 作者:行者123 更新时间:2023-11-29 02:01:47 26 4
gpt4 key购买 nike

我正在尝试设置在目标转场中实例化的类的属性。

具体来说,我有一个带有按钮的 Root View Controller 。该按钮只是通过 Storyboard连接到另一个 View Controller 。在 prepareForSegue 中,我实例化了目标 View Controller ,然后设置了一个属性。

当属性是目标的简单对象(int、NSInt、NSString 等)时,赋值就起作用了——也就是说,我可以在赋值前后使用 NSLog,并看到值从零变为我赋值的数字.

但是,当该属性是我创建的一个简单类的实例时,没有编译或运行时错误,但该值仍为零。

我尝试过的事情:

我的理解是@synthesize 是自动完成的,但我还是试过了。

我也试过将属性放在类头接口(interface)中,但我认为也没有必要。

我还使用下面的代码构建了一个新项目,以确保它不只是一些奇怪的东西,因为它是一个更大的应用程序的一部分。我排除了向后转场的代表,因为它工作正常。

我发现了很多向前传递数据的例子,但我找不到任何我需要的类。

考虑到没有错误,这感觉像是范围或初始化问题,但经过 3 天的摸索,我没有想法。

//菜单 View Controller .h

#import <UIKit/UIKit.h>
#import "Settings.h"
#import "setupViewController.h"

@interface menuViewController : UIViewController
@end

//菜单 View Controller .m

#import "menuViewController.h"

@interface menuViewController ()
@property (weak, nonatomic) IBOutlet UIButton *myButton;

@end

@implementation menuViewController {
Settings *menuSettings;
}

- (void)viewDidLoad {
[super viewDidLoad];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"toSecond"]) {
setupViewController *instanceOfSetupViewController = segue.destinationViewController;

// This assign doesn't change the property in the destination
instanceOfSetupViewController.myLocalSettings.bpm = 67;

// This local assign works
menuSettings.bpm = 77;
// But this assign doesn't change the property in the destination
instanceOfSetupViewController.myLocalSettings = menuSettings;
}
}

- (IBAction)prepareForUnwind:(UIStoryboardSegue *)segue {}

//setupViewController.h

#import <UIKit/UIKit.h>
#import "Settings.h"

@interface setupViewController : UIViewController

@property () Settings* myLocalSettings;
@end

//setupViewController.m

#import "setupViewController.h"

@interface setupViewController ()
@property (weak, nonatomic) IBOutlet UIButton *myButton;

@end

@implementation setupViewController

- (void)viewDidLoad {
[super viewDidLoad];

Settings *myLocalSettings = [[Settings alloc] init];
myLocalSettings.bpm = 13;
}

- (IBAction)myButtonClicked:(id)sender {
[self performSegueWithIdentifier:@"fromSecond" sender:self];
}

//设置.h

#import <Foundation/Foundation.h>

@interface Settings : NSObject

@property () NSInteger bpm;
@end

//设置.m

#import "Settings.h"
@implementation Settings
@end

谢谢!

最佳答案

它不起作用,因为您还没有创建 Settings 对象,所以 myLocalSettings 为零。在调用prepareForSegue时,目标 View Controller 的 View 尚未加载,因此您在viewDidLoad中实例化的Settings对象尚未创建(您应该删除该对象,否则它将覆盖您在此处创建的对象)。您应该首先在prepareForSegue 中创建该实例,

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"toSecond"]) {
setupViewController *instanceOfSetupViewController = segue.destinationViewController;
instanceOfSetupViewController.myLocalSettings = [Settings new];
instanceOfSetupViewController.myLocalSettings.bpm = 67;
}
}

关于ios - 在目标 Controller 中设置类的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30282009/

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