2012-03-07 3 views
1

私はiOSアプリケーション開発のノブです。
"UITableView - >詳細ビュー"アプリケーションを作成しようとしています。
プロジェクトテンプレートに「Master-Detail Application」プロジェクトが見つかりました。Xcode 4.2 Snowleopard Master-Detailアプリケーションのトラブルシューティング

私はそれを試しました。それから問題が起こった。 私は動的なテーブルビューを持っていたので、詳細ビューも動的に見せなければなりません。このよう :

Table View  Detail View 
    Item A   Item A is an <item_A_description>, with <item_A_summary> 
    Item B   Item B is an <item_B_description>, with <item_B_summary> 
    Item C   Item C is an <item_C_description>, with <item_C_summary> 

私はボタンメニューをバック使用して、表(リスト)表示に戻って後、問題が、あり、 はその後、私は、リストの異なる行、詳細ビューから再び項目を選択します選択した項目値に変更されません。
私が使用して値を渡しました(MasterView) - > initWithNibName - >(DetailView)
私の環境:SnowLeopardのためのXCode 4.2、iOS搭載SDK 5

更新
私はログを確認した後、パラメータ値正しい値で渡されました。しかし、私が設定したUIlabelのIBOutletはその価値を変えませんでした。

MasterViewController.m:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    TheItems *a = [data objectAtIndex:[indexPath row]]; 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 
     if (!self.detailViewController) { 
      self.detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController_iPhone" bundle:nil withItemId:(NSString *)a.itemId]; 
     } 
     [self.navigationController pushViewController:self.detailViewController animated:YES]; 
     [self.detailViewController release]; 
    } 
} 

DetailViewController.h:

@interface metapsDetailViewController : UIViewController <UISplitViewControllerDelegate> 
{ 
    NSString *itemId; 
} 
@property (strong, nonatomic) IBOutlet UILabel * detailItem; 
@property (nonatomic, retain) NSString *itemId; 
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil withItemId:(NSString *)itemId; 

DetailViewController.m:
これは私のコードです

@synthesize detailItem = _detailItem; 
@synthesize itemId; 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil withItemId:(NSString *)itemId 
{ 


    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     self.title = NSLocalizedString(@"Detail", @"Detail"); 
     self.itemId = itemId; 
    } 
} 

- (void)viewDidLoad 
{ 
    self.detailItem.text = self.itemId; 
} 

おかげ

答えて

1

detailViewControllerが存在しない場合にのみ作成します。 detailViewControllerに与えたアイテムはあなたのinitに入っているので、アイテムは一度しか設定されません。新しいデータを取得したときにdetailViewControllerを変更できるように、アイテムを設定できるメソッド(またはプロパティ)をdetailViewControllerに追加する必要があります。

編集:このような何かを実装:答えを

@synthesize itemId = _itemId; 

-(void)setitemId:(NSString*)itemId{ 

    if(_itemId != itemId) 
    { 
     [_itemId release]; 
     _itemId = [itemId retain]; 
     self.detailItem.text = _itemId; 
    } 
} 
+0

を感謝。うん、実際にはDetailViewControllerのプロパティを使ってみましたが、MasterViewControllerのdidSelectRowAtIndexPathの値を 'self.detailViewController.itemId = a.itemId;' ...という名前で渡しました。でもそれもうまくいきませんでした。 – arufian

+0

ラベルの変更を実装してくださいdetailViewControllerにも、editを見てください。 – ggfela

+0

ありがとう、私はそれを試してみてください。 – arufian