0

SplitViewControllersについての割り当てを読みましたが、何かがわからないため、円を描いて歩いています。

バーボタンアイテム(フィルター)としてmasterviewcontrollerとpopoverviewがあります

masterviewcontrollerはテーブルビューであり、popoverviewではuiviewコントローラーであるとしましょう

iPhoneでは、常にmasterviewcontrollerを割り当て、いくつかの変更後に参照を更新します。「検索」ボタンを押すと、新しいデータで新しいコントローラーがプッシュされます(考えてみると、これは最良のアイデアではなかったかもしれません)。もう動作しません。

コントローラを相互に参照する必要があることを読んだので、このようにしました。

フィルタコントローラで(これはポップオーバービューです)

.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];

}

ところで、filterSearchでNslogを実行して、更新されているかどうかを確認する場合:

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

最初のものは更新されません2番目のものはコース外で更新されます

アップデート2:(ポップビューを起動するにはどうすればよいですか):

アクションのあるmasterviewcontrollersナビゲーションにバーボタンアイテムを追加しました。masterviewcontroller->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];
}
}
4

1 に答える 1

1

filterControllerを起動するときは、MasterViewControllerへの参照を渡す必要があります。フィルタコントローラにそのプロパティがありますが、そのプロパティに値を割り当てることはありません。

編集後:

prepareForSegueメソッドは次のようになります。

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

MasterViewController.hをFilterController.mにインポートしたことを確認してください

于 2013-01-12T18:15:13.493 に答える