我正在尝试建立一个对象来控制我的所有数据,以便它可以在后台设置事物,使其表视图的加载速度比现在快。
这就是我要实现的目标。
当像这样选择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;
再次,检查搜索,许多人对此进行了很好的讨论。这只是一种方法。我希望至少有道理,为什么您的代码无法正常工作。
希望能有所帮助。