Xcode 4.2雪豹主细节应用程序故障排除



我是iOS应用程序开发的新手
我正在尝试创建"UITableView->to Detail View"应用程序
并在项目模板中找到了"Master Detail Application"项目。

然后我试了一下。然后问题来了。我有一个动态的表视图,所以我必须让细节视图看起来也很动态。像这样:

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)传递了值
我的环境:XCode 4.2 for SnowLeopard,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;
}

感谢

只有在detailViewController不存在时才能创建它。您提供给detailViewController的项在您的init中,因此该项将只设置一次。您应该将一个方法(或属性)添加到您的detailViewController中,在其中您可以设置项,以便在您获得新数据时它可以更改您的detail ViewController。

编辑:实现类似的东西:

@synthesize itemId = _itemId;
-(void)setitemId:(NSString*)itemId{
    if(_itemId != itemId)
    {
        [_itemId release];
        _itemId = [itemId retain];
        self.detailItem.text = _itemId;
    }
}

最新更新