我正在尝试设置一个对象来控制我的所有数据,以便它可以在后台进行设置,看起来我的tableviews加载速度比现在更快等。
这就是我想要实现的目标。
当我们选择tableviewcell时,我在第二个VC中设置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
}
正如您所看到的,它可以正确输出正确的输出。
但是我不知道如何调用manufactSearchObjectStringFVC并将它保存的值传递给我想在我的firstviewcontroller上传递的uitableviewcell。
这是我测试atm的原因。
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
VehicleControllerNSObject *vehicleControllerNSObject = [[VehicleControllerNSObject alloc] init];
manufactureSearchObjectString = vehicleControllerNSObject.manufactureSearchObjectStringFVC;
NSLog(@"%@", vehicleControllerNSObject.manufactureSearchObjectStringFVC);
}
该nslog打印为空..
我有三个问题
1,如何将正确的值输入第一个值控制器。
2,我应该像这样使用viewDidAppear吗?..我想不是..我怎么能做得更好
3,你认为这是做这种事情的一种好方法,因为将来我想用NSObjectClass来解析信息,缓存等所有感觉背后留下的视图只显示数据准备好希望有助于表现..任何帮助都会非常感激,因为我真的想学习这些东西,因为我知道这对我很重要。
答案 0 :(得分:4)
您的问题非常精美,格式清晰,图表清楚,要求您进行搜索似乎很遗憾。但这是:
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;
再次检查搜索,很多人对此进行了很好的讨论。这只是一种方法。我希望至少为什么你的代码不起作用是有道理的。
希望有所帮助。
答案 1 :(得分:1)
回答问题3.否。
我认为做这样的事情的最好方法是使用Core Data和它的NSManagedObject。
UITableViewController和NSFetchedResultsController的组合,从Core Data sqlite后备存储中提供,如果设置良好,将提供并保持UITableView更新。
在这里描述一切都是很久的。所以我会在那里停下来。
如果您不想这样做,总是可以使用共享指向可变对象或使用singleton
对象在UIViewController之间传递信息。