我有一些非常有趣的逻辑,基本上我有这个数据,我想检查 在我显示下一个视图之前..以防数据为空我想要弹出视图,如果数据不为空,那么我想加载视图以将其显示在导航堆栈上。
所以在我的tableView:didSelectRowAtIndexPath:方法中,当选择I时,获取当前的选择ID号,这样我就可以将要解析的数据的值限制为仅相关的值。
这是代码在我的方法中的样子。
#pragma mark - Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
///... This stuff is for context..
//Get the subview ready for use
VSRViewController *vSRViewController = [[VSRViewController alloc] initWithNibName:@"VSRViewController" bundle:nil];
//Sets the back button for the new view that loads (this overrides the usual parentview name with "Back")
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style: UIBarButtonItemStyleBordered target:nil action:nil];
//Pass Title over to subview
vSRViewController.title = @"SubModel";
//Selected cell gives restult to the subview or o the parent view to be displayed.. when the view is pushed or poped
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K like %@",@"MODEL",cell.textLabel.text];
filterArray = [parsedDataArrayOfDictionaries filteredArrayUsingPredicate:predicate];
//Sets restriction string so that when subCacheData is parsed only values mathching modIdString will be parsed
modIdString = [[filterArray valueForKey:@"MODID"] objectAtIndex:0]; //Restricts Mods dataset
//This sets which if statment to enter in parserDidEndDocument
dataSetToParse = @"ModID";
[self startTheParsingProcess:modCacheData];
//tempModArra is the array I get back from the parser that has had the restriction string applied to it
if ([tempModArray count] == 0) {
NSLog(@"POPVIEW"); //testing
//pop this view to the parent view.. organize all the values that have to be sent back with protocols and delegates
}else if ([tempModArray count] != 0){
//Pass the selected object to the new view controller.
[self.navigationController pushViewController:vSRViewController animated:YES];
//Check if modIndexPath is same as selected if not remove accessory tick from the subview
if (![modIndexPath isEqual:indexPath]){
submodIndexPath = nil;
}
[vSRViewController subModelCachedData:modCacheData indexPath:submodIndexPath dataSetToParse:@"ICSum" modelArray:filterArray modIndexPath:indexPath];
//.....
}
}
}
//...
此代码已经过编辑以便于阅读,其中还有很多其他内容......所以有些事情可能有问题......因为我编辑了一些名字......但它应该没问题。
这是我的解析器委托中发生的事情。
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
//.. other stuff up here.
if (dataSetToParse == @"ModID") {
//This applies the
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K like %@",@"ModID",modIdString]; //modIdString restricts results that have been parsed
NSArray *filteredArray = [parsedDataArrayOfDictionaries filteredArrayUsingPredicate:predicate];
tempModArray = filteredArray;
//what do I do here to get tempModArray back up to tableView:didSelectRowAtIndexPath: method.. this is where I am abit lost.
}
}
就是这样......一切正常,唯一的问题就是我无法将我的temoModArray带回tableView:didSelectRowAtIndexPath:所以我需要一些帮助来思考解决方案。
同样对于上下文,我这样做的原因是,如果tempModArray中没有值,我想将用户发送回父视图,因此他们在转到子视图进行选择时看不到空的tableview希望这一切都有意义..我期待着我们的回复。
答案 0 :(得分:1)
我该怎么做才能让tempModArray备份到tableView:didSelectRowAtIndexPath:method
简短的回答:你没有。
didSelectRow已经完成了他的工作,即告知应用用户选择了该行。 现在该应用程序还有一些工作要做。也就是说,弄清楚它是否会用数据推送新的视图控制器。所以不要推,决定是否有数据,然后弹出;相反,如果没有数据,请不要放在第一位。
在解析器知道它是否有数据的位置,您有很多选择。 我假设您的解析器委托不在您的表视图控制器类中。 你可以:
imo协议方法是最干净的,(松耦合但具有良好的命名),但每个都是自己的。