我正在尝试建立一个对象来控制我的所有数据,以便它可以在后台设置事物,使其表视图的加载速度比现在快。

这就是我要实现的目标。

当像这样选择tableviewcell时,我正在从secondVC的NSObject中设置一个变量:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//Access selected cells content (cell.textLabel.text)
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    //Parent view logic (sends info back to the correct cell in parent view)
    if (parentViewSelectedIndexPath.section == 0)
    {
        if (parentViewSelectedIndexPath.row == 0)
        {
            //Predicates restrict the values that will be returned from the query
            NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K like %@",@"MANUFACTURER",cell.textLabel.text];
            NSArray *filterArray = [myDataArray filteredArrayUsingPredicate:predicate];
            //[[self delegate] setManufactureSearchFields:filterArray withIndexPath:indexPath]; //This is where I pass the value back to the mainview
            //Using Object
            VehicleControllerNSObject *vehicleControllerNSObject = [[VehicleControllerNSObject alloc] init];
            [vehicleControllerNSObject setFirstCell:filterArray];

        }
//etc

最后,您可以看到VechicleControllerNSObject中正在设置的方法,如下所示。
-(void)setFirstCell:(NSArray *)array{

    manufactureSearchObjectStringFVC = [[array valueForKey:@"MANUFACTURER"] objectAtIndex:0];
    NSLog(@"%@", manufactureSearchObjectStringFVC); // this prints the correct value to the console
}

如您所见,这将打印正确的输出。

但是我不知道如何调用manufacturingSearchObjectStringFVC并将其保存的值传递给uitableviewcell,我希望将其传递给firstviewcontroller。

这就是我测试atm的功能。
- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    VehicleControllerNSObject *vehicleControllerNSObject = [[VehicleControllerNSObject alloc] init];
    manufactureSearchObjectString = vehicleControllerNSObject.manufactureSearchObjectStringFVC;
    NSLog(@"%@", vehicleControllerNSObject.manufactureSearchObjectStringFVC);

}

该nslog打印null。

我有三个问题

1,如何将正确的值放入第一个valuecontroller中。

2,我应该像这样使用viewDidAppear吗?..我认为不是..我该如何做得更好

3,您是否认为这是做此类事情的好方法,因为将来我想使用NSObjectClass解析信息,缓存等所有信息,从而使视图仅在希望数据准备就绪时显示帮助表现..

任何帮助将不胜感激,因为我真的想学习这些东西,因为我知道这对我很重要。

最佳答案

您的问题如此精美,清晰,格式清晰,以至于要求您进行搜索似乎很可耻。但是这里是:

Search for Sharing Data between View Controllers

您会发现许多关于在视图控制器之间共享数据的很好的讨论。

简要地说,我可以告诉您为什么您的代码无法正常工作。在tableView:didSelectRowAtIndexPath:方法中,您每次都在(alloc/init)类的实例中创建VehicleControllerNSObject。然后回到第一个viewDidAppear:的视图控制器,同样,您每次都在创建一个全新实例(alloc/init)

因此,您有多个对象来去去去,并且它们之间没有任何关系。这有点像在公交车站给某个人提供一些重要信息,然后在以后随机挑选其他人并尝试从她那里检索相同的信息。

因此,一个快速的想法是只创建一次VehicleControllerNSObject实例(顺便说一句,这对于一个类来说有点奇怪的名字,因为通常所有objective-c对象都是NSObject的后代。我只想将该VehicleController称为现在)

假设您要使用VehicleController的“sharedInstance”。您可以在VehicleController中添加一个类方法,以提供一种轻松获取该sharedInstance的方法:

+(VehicleController*)sharedInstance {

    static VehicleController *sharedInstance_ = nil;

    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{

        sharedInstance_ = [[VehicleController alloc] init];
    });

    return sharedInstance_;
}

因此,要在其他类的方法中获取该实例,您可以执行以下操作:
VehicleController *sharedController = [VehicleController sharedInstance];
sharedController.someProperty = someValue;

// and then back in your first view controller, similarly:
VehicleController *sharedController = [VehicleController sharedInstance];
id someValue = sharedController.someProperty;

再次,检查搜索,许多人对此进行了很好的讨论。这只是一种方法。我希望至少有道理,为什么您的代码无法正常工作。

希望能有所帮助。

07-24 09:27