gpt4 book ai didi

ios - 在将数据加载到导航 Controller 之前将数据传递给 UIView

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

我有一个非常复杂的情况(对我来说很好)我正在努力解决,但到目前为止我遇到了麻烦。

我现在将概述应用程序的结构,然后解释我遇到的问题。由于我使用的数据的敏感性,我使用的名称是虚构的。

secondToLastViewController // is a UITableView on the navigation stack
lastViewController // is just a normal UIView that i want to push onto the navigation stack
RequestClass // this class dose requests to my database and passed the data back to correct classes
getInfoClass // class is used for this specific request stores the information correctly and passes it back to secondToLastViewController

因此,当用户在 secondToLastViewController 中启动 didSelectRowAtIndexPath 时,我使用 RequestClass

请求数据
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//..
[RequestClass Getinfo:storedInfoPram];
}

现在线程跳转到我的 RequestClass,它反过来查询数据库以获取一些数据,然后接收这些数据并将这些数据传递给我的 getInfoClass 原因我这样做是因为 RequestClass 中有几十个不同的调用都在做不同的事情,这个特定的请求带回了很多数据我必须分类为正确的对象类型所以创建了这个类来帮我做。

无论如何,在 getInfoClass 中,我将所有内容分类为正确的类型等,然后在名为 recivedData 的方法中将这些数据返回secondToLastViewController,这是还有我认为出了问题的地方...当我创建 secondToLastViewController 的新实例时,问题是我不知道如何将数据传回同一个 secondToLastViewController已经在堆栈上并且是原始请求的来源。

- (void) recivedData {
// do some stuff then pass data back to secondToLastViewController

SecondToLastViewController *sec = [[SecondToLastViewController alloc] init];

[sec sendGetSeriesArrays:pram1 Pram2:pram2 Pram3:pram3 Pram4:pram4 Pram5:pram5];

}

现在回到 SecondToLastViewController 线程在这个方法中着陆

- (void)sendGetSeriesArrays:pram1 Pram2:pram2 Pram3:pram3 Pram4:pram4 Pram5:pram5{

// call detailed view onto the stack
lastViewController *last = [[lastViewController alloc] initWithNibName:@"lastViewController" bundle:nil];

[self.navigationController pushViewController:last animated:YES];
}

在线程到达这一点之后什么也没有发生...所有数据都在那里并准备发送但是新 View 永远不会被推送到 Controller 堆栈..我认为这是由于我声明了另一个版本 < strong>secondToLastViewController 当我在 getInfoClass

我首先想知道的是如何将 sendGetSeriesArrays 中接收到的数据传递给最终 View ,其次如何将最后一个 View 加载到导航堆栈中?

最佳答案

您的观察是正确的,您正在 getInfoClass 中再次创建 secondToLastViewController 实例。不要那样做,您必须使用 delegate/protocol 方法将数据传回 secondToLastViewController。

这样做
在 getInfo 类中定义一个协议(protocol)

getInfoClass.h

@protocol GetInfoClassProtocol <NSObject>

//delegate method calling after getting data
// I dont know the argument types give it properly
- (void)sendGetSeriesArrays:pram1 Pram2:pram2 Pram3:pram3 Pram4:pram4 Pram5:pram5;

@end

// declare the delegate property

@property (assign, nonatomic)id<GetInfoClassProtocol>delegate;

getInfoClass.m

- (void) recivedData {
// do some stuff then pass data back to secondToLastViewController
if ([self.delegate respondsToSelector:@selector(sendGetSeriesArrays: param2:)])
{
[self.delegate sendGetSeriesArrays:pram1 Pram2:pram2 Pram3:pram3 Pram4:pram4 Pram5:pram5];
}

}

secondToLastViewController.m

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//..
RequestClass.delegate = self;
[RequestClass Getinfo:storedInfoPram];
}

你的 secondToLastViewController 应该符合 GetInfoClassProtocol

关于ios - 在将数据加载到导航 Controller 之前将数据传递给 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16556778/

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