0

マスター ビューのテーブル ビューにm working on a splitview app , where the master view is a table view fetched from sqlite database ,when the user tab a row the detail view UITableView get updated by data also fetched from the same sqlite database. Iデータを入力することはできますが、詳細ビューのテーブル ビューを新しいデータで更新することはできませんか? これを行う方法についてどこでも検索しましたが、役に立ちませんでした。ほとんどのチュートリアルと回答はラベルまたはWebビューに関するものですが、detailviewテーブルビューに関するものは見つかりませんでした。

私はstroyboardとxcode 4.5.2を使用しています

これが masterviewcontroller.m didSelectRowAtIndexPath です

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath    *)indexPath
  {
      Destinations *dest = [self.destinations objectAtIndex:[indexPath row]];
       self.detailViewController.title = dest.destName;
      self.detailViewController.detailItem = dest.destID;
      [self.tableView reloadData];
 }

そして、ここにdetailviewcontroller.hがあります

#import <UIKit/UIKit.h>
#import "FMDatabase.h"

@interface DetailViewController : UIViewController<UITableViewDelegate,  UITableViewDataSource,UISplitViewControllerDelegate>
{
   NSMutableArray *alternates;
   UITableView *alternateTableView;
}

@property (nonatomic,strong) NSMutableArray *alternates;

@property (strong, nonatomic) id detailItem;

@property (weak, nonatomic) IBOutlet UILabel *detailDescriptionLabel;
@property (strong, nonatomic) IBOutlet UITableView *alternateTableView;

@property (retain, nonatomic) NSString *pdestid;

@end

詳細ビューコントローラー.m

#import "DetailViewController.h"
#import "Alternates.h"

@interface DetailViewController ()

@property (strong, nonatomic) UIPopoverController *masterPopoverController;
- (void)configureView;
@end

@implementation DetailViewController
@synthesize pdestid, alternates,alternateTableView;

#pragma mark - Managing the detail item

- (void)setDetailItem:(id)newDetailItem
{
    if (_detailItem != newDetailItem) {
       _detailItem = newDetailItem;

        // Update the view.

       [self configureView];
  }

    if (self.masterPopoverController != nil) {
    [self.masterPopoverController dismissPopoverAnimated:YES];
    }        
}

 - (void)configureView
{
   // Update the user interface for the detail item.

    if (self.detailItem) {
       self.detailDescriptionLabel.text = [self.detailItem description];
       self.pdestid = [self.detailItem description];
       NSFileManager * fileManager = [NSFileManager defaultManager];
       NSError *error;
       NSArray * paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
       NSString * documentsDirectory = [paths objectAtIndex: 0];
       NSString * writableDBPath = [documentsDirectory stringByAppendingPathComponent: @"alternates.s3db"];
        BOOL success = [fileManager fileExistsAtPath: writableDBPath];
       if (! success) {
           NSString * defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: @"alternates.s3db"];
           success = [fileManager copyItemAtPath: defaultDBPath toPath: writableDBPath error: & error];
        }
        FMDatabase * db = [FMDatabase databaseWithPath: writableDBPath];
        if (! [db open])
        {
           NSLog (@"Err% d:%@", [db lastErrorCode], [db lastErrorMessage]);
        }
       [db setShouldCacheStatements: YES];
       NSString * sql = [NSString stringWithFormat:@"SELECT * FROM Alternates WHERE destID  = '%@' ORDER BY altName ASC;", pdestid];
       FMResultSet * rs = [db executeQuery: sql];
       alternates = [[NSMutableArray alloc] init];
       while ([rs next])
        {
           Alternates * alter = [[Alternates alloc] init];
           alter.altname = [rs stringForColumn: @"altName"];
           alter.alticao = [rs stringForColumn: @"altICAO"];
           alter.dist = [rs stringForColumn:@"distance"];
           alter.mgtrk  =[rs stringForColumn:@"magtrack"];
           alter.route = [rs stringForColumn:@"route"];
           [alternates addObject:alter];

      }

      [rs close];
      [db close];


    }
}

- (void)viewDidLoad
{
// Do any additional setup after loading the view, typically from a nib.
   [super viewDidLoad];

   [self configureView];
}

- (void)didReceiveMemoryWarning
{
   [super didReceiveMemoryWarning];
  // Dispose of any resources that can be recreated.
}

    #pragma mark - Table View

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
       return 1;
  }

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  {
      return alternates.count;
  }

   - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"AlternateCell"];
      Alternates *alter = [self.alternates objectAtIndex:[indexPath row]];

     cell.textLabel.text = alter.altname;

    return cell;
  }


  #pragma mark - Split view

   - (void)splitViewController:(UISplitViewController *)splitController willHideViewController:(UIViewController *)viewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)popoverController
   {
     barButtonItem.title = NSLocalizedString(@"DESTINATIONS", @"DESTINATIONS");
     [self.navigationItem setLeftBarButtonItem:barButtonItem animated:YES];
     self.masterPopoverController = popoverController;
  }

     - (void)splitViewController:(UISplitViewController *)splitController willShowViewController:(UIViewController *)viewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
 {
    // Called when the view is shown again in the split view, invalidating the button and popover controller.
   [self.navigationItem setLeftBarButtonItem:nil animated:YES];
   self.masterPopoverController = nil;
   }
     -(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
   {
     return  YES;
  }

  - (void)viewDidUnload {
   [self setAlternateTableView:nil];
   [super viewDidUnload];
 }
  @end
4

2 に答える 2