Xcode 4.2 Snowleopard Master-Detail Устранение неполадок приложения - PullRequest
1 голос
/ 07 марта 2012

Я новичок в разработке приложений для iOS.
Я пытаюсь создать приложение "UITableView -> в подробном представлении".
И обнаружил проект «Приложение 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)
Моя среда: XCode 4.2 для SnowLeopard, iOS SDK 5

Обновлено
После того, как я проверил журнал, значение параметра прошло с правильным значением. Но IBOutlet UIlabel, который я установил, не изменил его значение.
Это мой код:

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 Ответ

1 голос
/ 07 марта 2012

Элемент detailViewController создается только тогда, когда он не существует. Элемент, который вы передаете detailViewController, находится в вашей инициализации, поэтому элемент будет установлен только один раз. Вы должны добавить метод (или свойство) в ваш detailViewController, где вы можете установить элемент, чтобы он мог изменять ваш detailViewController при получении новых данных.

Редактировать: реализовать что-то вроде этого:

@synthesize itemId = _itemId;

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

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