gpt4 book ai didi

ios - 需要帮助在 ViewController 之间传输数据

转载 作者:行者123 更新时间:2023-11-29 12:55:56 25 4
gpt4 key购买 nike

我想让我的项目更好地组织起来,而不是用我想从 viewcontroller 传输到 viewcontroller 的数据使我的 Appdelegate 重载我想要创建一个模型类来帮助让事情更有条理。但是,在使用模型时,我很难在 Controller 之间传输数据。当尝试将此 nsstring 数据从 ViewController1 传输到 ViewController2 时,你能告诉我我的方法错误吗?附言我编造了这个例子,因为我的真实项目有点困惑所以我提前为任何不一致之处道歉。以下结果 NSLog 报告 null in

ViewController2.m

ViewController1.m

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
ViewController2 *viewController2 =[[ViewController2 alloc]init];
ViewControllerModel *vcm = [self.array objectAtIndex:indexPath.row];

NSLog(@"%@",vcm.string) // this will output a number

[self.navigationController pushViewController:viewController2 animated:YES];
}
// this delegate fetches an array of json data
-(void)fetchedResults:(NSMutableArray*)arrayList{
self.array = arrayList;
}

ViewController2.m

  - (void)viewDidLoad
{
ViewControllerModel *vcm = = [[ViewController alloc] init];
[super viewDidLoad];
NSLog(@"%@",vcm.string); // this will output null.
}

View Controller 模型.h #导入

  @interface ViewControllerModel : NSObject
@property (nonatomic, strong) NSString *string;

@end

ViewControllerModel.m

  #import "ViewControllerModel.h"

@implementation ViewControllerModel
@synthesize string;

@end

MyHandler.m

    //this is where vcm.string in ViewController1.m will get all the numbers not sure if this is needed but just in case .

for (NSDictionary *dict in responseArray)
{
ViewControllerModel *vcm = [[ViewControllerModel alloc] init];

vcm.string = ([dict valueForKey:@"string"] == [NSNull null]) ? @"" : [NSString stringWithFormat:@"%@",[dict valueForKey:@"string"]];

最佳答案

进行以下更改:

ViewController1.m

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
ViewController2 *viewController2 =[[ViewController2 alloc]init];
ViewControllerModel *vcm = [ViewControllerModel alloc] init];
vcm.string = @"My String";
viewController2.vcm = vcm;

NSLog(@"%@",vcm.string) // this will output a number
[self.navigationController pushViewController:viewController2 animated:YES];
}

// this delegate fetches an array of json data
- (void)fetchedResults:(NSMutableArray*)arrayList{
self.array = arrayList;
}

ViewController2.h

@interface ViewController2 : NSObject
@property (nonatomic, strong) ViewControllerModel *vcm;
@end

ViewController2.m

- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"%@", self.vcm.string);
}

我还建议进行以下改进。

  1. 此时您并不真的需要模型对象。您可以将字符串作为 NSString 属性添加到 ViewController2 而不是 ViewControllerModel 对象:

    @property (nonatomic, copy) NSString *string;

  2. 我建议将您的属性、模型对象和 View Controller 命名为更具描述性的名称。即使它是示例,如果您不这样做,也很难理解它。

  3. 当您创建 NSString 属性(或任何其他具有可变等效项的类)时,我建议使用“copy”而不是“strong”。如果将 NSMutableString 分配给被认为是更安全方法的属性,这将生成字符串的不可变副本。

关于ios - 需要帮助在 ViewController 之间传输数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21104168/

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