objective-c - Xcode 4.2 Snowleopard Master-Detail 应用程序故障排除

标签 objective-c ios xcode4.2 osx-snow-leopard

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

然后我试了一下。那么问题来了。 我有一个动态 TableView ,所以我必须使详细 View 也看起来动态。 像这样:

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>

问题是,在我使用后退按钮菜单返回表(列表) View 后, 然后我再次从列表的不同行中选择项目,然后详细 View 不会更改为所选项目值。
我确实使用 (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 的 Item 在您的 init 中,因此该项目只会设置一次。您应该向您的 detailViewController 添加一个方法(或属性),您可以在其中设置项目,以便它可以在您获取新数据时更改您的 detailViewController。

编辑:实现这样的东西:

@synthesize itemId = _itemId;

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

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

关于objective-c - Xcode 4.2 Snowleopard Master-Detail 应用程序故障排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9596557/

相关文章:

objective-c - 隐式 CALayer 动画不会产生动画

objective-c - Sprite 表 : tool to get coordinates

iphone - 了解 Xcode 4.2 中新 Storyboard 功能的最佳资源/指南是什么?

iphone - XCODE 4.2 中的构建文件夹位置

objective-c - 获取 NSImage 的正确图像宽度和高度

ios - 如何使用 objective-c 拒绝xmpp群聊接收邀请

objective-c - UIView 仅设置侧边框

ios - 解析: emailVerified is found nil on iPhone but works fine on Simulator

ios - 如何从不同的 swift 文件调用函数

xcode - 获取 XCode 中错误的行号