저는 xcode와 objective-C에 매우 초짜입니다. 비슷한 코드에서 다른 동작을하기 때문에 혼란 스럽습니다. 제가 이야기의 코드는 다음과 같습니다비슷한 코드와 일치하지 않는 동작
이 코드는 무엇을 어떻게해야한다 않습니다-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
KTSDetalleVisitaViewController *detailViewController = [[KTSDetalleVisitaViewController alloc] initForNewItem: NO withDelegate:self];
NSArray *items = [[KTSVisitasStore sharedStore]allItems];
Visita *selectedItem = [items objectAtIndex:[indexPath row]];
//Give detail view controller a pointer to the selected item
[detailViewController setItem:selectedItem];
//Put the new detailViewController into the top of the navigation controller's stack
UINavigationController *nav = [[UINavigationController alloc]
initWithRootViewController:detailViewController];
if (![self splitViewController]) {
[nav setToolbarHidden:NO];
[nav setModalPresentationStyle: UIModalPresentationFullScreen];
[nav setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
[self presentViewController:nav animated:YES completion:nil];
} else {
NSArray *nvc = [NSArray arrayWithObjects:[self navigationController], nav, nil];
[[self splitViewController] setDelegate:detailViewController];
[[self splitViewController] setViewControllers:nvc];
}
}
가, 내 말은, 그것은 TableViewController에서 선택한 행과 일치하는있는 NSArray에서 요소를 취하고있는 요소를 넣어 장치 유형에 따라 별도의보기로 표시되는 DetailedViewController입니다. 내가 말했듯이이 코드는 완벽하게 작동합니다. 다른 클래스에
나는이 유사한 코드가 있습니다-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
KTSDetalleArticuloViewController *detailViewController = [[KTSDetalleArticuloViewController alloc] initForNewItem: NO withDelegate:self];
NSArray *items = [[KTSArticuloStore sharedStore]allItems];
Articulo *selectedItem = [items objectAtIndex:[indexPath row]];
//Give detail view controller a pointer to the selected item
[detailViewController setItem:selectedItem];
//Put the new detailViewController into the top of the navigation controller's stack
UINavigationController *nav = [[UINavigationController alloc]
initWithRootViewController:detailViewController];
if (![self splitViewController]) {
[nav setToolbarHidden:NO];
[nav setModalPresentationStyle: UIModalPresentationFullScreen];
[nav setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
[self presentViewController:nav animated:YES completion:nil];
} else {
NSArray *nvc = [NSArray arrayWithObjects:[self navigationController], nav, nil];
[[self splitViewController] setDelegate:detailViewController];
[[self splitViewController] setViewControllers:nvc];
}
}
정확히 같은 이전 코드가 않습니다 어떻게해야하지만, 그렇지 않습니다. 문제는 viewDidLoad 메서드가 setViewControllers 호출 전에 시작되고 해당 메서드 (viewDidLoad)에서 NSArray에서 검색 한 개체의 UI 정보를 설정하는 것입니다.
두 detailViewControllers * 항목 개체는 weak 및 nonatomic 변수로 선언되고 synthesize 문을 사용하여 구현됩니다.
나는 이미 nil 객체가 검색되지 않았는지 확인 했으므로 DetailViewController의 라이프 사이클에서 뭔가를 놓치고 있음을 분명히 알았습니다.
모든 조언을 매우 환영합니다. 도와 주셔서 미리 감사드립니다 !!
답변이 완벽하게 작동하지만이 코드가 두 경우 모두 다르게 작동하는 이유는 무엇입니까? 귀하의 대답을 읽기 전에 viewDidLoad에서 UI를 업데이트하는 코드를 작성하는 것이 적절한 장소가 아니라는 점에 동의합니다. 첫 번째 코드는 항상 UI를 올바르게 업데이트하지만 초는 아닙니다. – SantiFdezMunoz
모든 코드를 보지 않고서는 왜 작동하는지 그다지 말할 수 없습니다. 내 생각 엔 UI가 처음 인스턴스의 어느 시점에서 새로 고쳐 지지만 2 단계는 새로 고칩니다. – Darren
대런 감사합니다. 코드를 검토하고 이러한 종류의 새로 고침을 검색 할 것입니다. 도와 줘서 고마워. – SantiFdezMunoz