SplitViewController参考逻辑

时间:2013-01-12 16:09:06

标签: ios xcode uisplitviewcontroller pass-by-reference

我读了关于SplitViewControllers的分配但是我走在圈子里因为我不明白的东西。

您有一个masterviewcontroller和一个popoverview作为一个条形按钮项(过滤器)

让我们说masterviewcontroller是一个tableview,在popoverview中是一个uiview控制器

在iphone上我总是分配masterviewcontroller并在经过一些修改后更新引用,当你点击“搜索”按钮时,它会推出一个带有新数据的新控制器(想想看,也许这不是最好的主意)现在逻辑不再起作用了。

我已经读过你必须互相引用控制器,所以我这样做了。

过滤器控制器中的

(这是popoverview)

.h

@property (strong, nonatomic) MasterViewController *masterviewController;
@property (weak, nonatomic) IBOutlet UISlider *filterPrice;

- (IBAction)filterSearch:(id)sender;


.m
- (IBAction)filterSearch:(id)sender {

self.masterviewController.filterSearchPrice = [NSNumber numberWithInt:self.filterPrice.value];
[self.masterviewController performFilterSearch];
}

performFilterSearch检查字段,调用带有filternames的url并返回json对象,解析并重新加载数据..

现在我希望masterviewcontroller能够显示新数据,但事实并非如此,事实上没有任何反应......

更新这是FilterSearch:

-(void)performFilterSearch
{

[queue cancelAllOperations];
[[AFImageCache sharedImageCache] removeAllObjects];
[[NSURLCache sharedURLCache] removeAllCachedResponses];

isLoading =YES;
[self.tableView reloadData];

searchResults = [NSMutableArray arrayWithCapacity:10];

NSURL *url = [self urlFilterWithSearchPrice:filterSearchPrice];
NSLog(@"%@",url);

NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFJSONRequestOperation *operation = [AFJSONRequestOperation
                                     JSONRequestOperationWithRequest:request
                                     success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
                                         [self parseDictionary:JSON];


                                         isLoading = NO;
                                         [self.tableView reloadData];

                                     }
                                     failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
                                         [self showNetworkError];
                                         isLoading = NO;
                                         [self.tableView reloadData];
                                     }];

operation.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html", nil];
[queue addOperation:operation];

}

btw当我在filterSearch中检测Nslog是否更新时:

NSLog(@"%d",self.masterviewController.filterSearchPrice);
NSLog(@"%d",[self.filterTypeSegmentedControl selectedSegmentIndex]);

第一个永远不会更新,第二个会更新当然

更新2 :(如何启动popview):

我在masterviewcontrollers导航栏中添加了一个带有操作的栏按钮项。 我在masterviewcontroller中添加了一个popover segue - > filtercontroller

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

filterPopOver  = [(UIStoryboardPopoverSegue *)segue popoverController];

}

- (IBAction)filterPopButton:(id)sender {

if (filterPopOver){
    [filterPopOver dismissPopoverAnimated:YES];
}
else{
    [self performSegueWithIdentifier:@"showFilterPopover" sender:sender];
}
}

1 个答案:

答案 0 :(得分:1)

启动filterController时,需要传入对MasterViewController的引用。您在过滤器控制器中有一个属性,但是您从不为该属性赋值。

编辑后:

您的prepareForSegue方法应如下所示:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    FilterController *fc = (FilterController *)segue.destinationViewController;
    fc.masterViewController = self;
}

确保已将MasterViewController.h导入FilterController.m