- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog((@"This is didSelectRowAtIndexPAth"));
DetailViewController *detailViewController = [[DetailViewController alloc] init];
detailViewController.myDictionary = [self.placeArray objectAtIndex:[indexPath row]];
/* The below NSlog is showing the content , its not null still in next viewcontroller same variable showing null content*/
NSLog(@"My Dictionary: This is a MasterView%@",detailViewController.myDictionary);
[self performSegueWithIdentifier:@"showDetail" sender:self];
}
ответ
try this
Decalre один NSInteger varable Globaly назначить этот varble для indexpath.row
@interface DashbordViewController()
{
NSInteger SelectedRownum;
}
@end
@implementation DashbordViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
SelectedRownum=indexPath.row
[self performSegueWithIdentifier:@"showDetail" sender:self];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"showDetail"])
{
NSLog((@"This is didSelectRowAtIndexPAth%@",SelectedRownum));
DetailViewController *detailViewController = [segue destinationViewController];
detailViewController.myDictionary = [self.placeArray objectAtIndex:SelectedRownum];
}
}
Это потому, что представленный экземпляр вашего DetailViewController
отличается от экземпляра, который вы создаете вручную. Вы должны либо представить этот новый ViewController
самостоятельно (по моделям или путем нажатия), либо реализовать метод prepareForSegue
и установить там словарь.
Редактировать:
В 2 решения:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
DetailViewController *detailViewController = [[DetailViewController alloc] init];
detailViewController.myDictionary = [self.placeArray objectAtIndex:[indexPath row]];
// If it is a modal
[self presentViewController:detailViewController animated:YES];
}
ИЛИ
@implementation MyClass {
NSIndexPath *selectedCellIndexPath;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog((@"This is didSelectRowAtIndexPAth"));
selectedCellIndexPath = indexPath;
[self performSegueWithIdentifier:@"showDetail" sender:self];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"showDetail"]) {
DetailViewController *detailViewController = (DetailViewController *)segue.destinationViewController;
detailViewController.myDictionary = [self.placeArray objectAtIndex:selectedCellIndexPath.row];
}
}
В проверке DetailViewController если MyDictionary это свойство объявлен слабым или сильным ..
Это было нетомично, сохраните, я изменил его на сильный. Все еще нет контроллера. – Vishal
Поскольку я не могу видеть реализацию контроллера (являющегося подклассом UIViewController или нет), я не могу сказать много, но имейте в виду, что initWithNibName:bundle:
является назначенным инициализатором для UIViewController, а не init
. Итак, это первая проблема. В любом случае проверьте экземпляр перед установкой свойства. Вполне вероятно, что экземпляр равен нулю.
EDIT:
Это также весьма вероятно, что они вы инстанцирование нового View Controller из существующих. В этом случае вы можете добавить новый контроллер представления в качестве дочернего контроллера или представить новый контроллер из существующего. В обоих случаях свойства существующих доступны из новых свойств: parentViewController
и presentingViewController
, что делает историю противоположной: вы берете значение свойства от существующего контроллера в новый контроллер.
Что мне делать с initWithNibName? – Vishal
Если у вас есть файл NIB, связанный с вашим DetailViewController, тогда инициализируйте это имя и комплект NIB с помощью nil. Пожалуйста, прочитайте информацию Apple Developer о классе UIViewController и https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html#//apple_ref/doc/uid/TP40007457. – mbpro
У меня нет файла NIB, я работаю над раскадрой. – Vishal
попробуйте это. , ,
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog((@"This is didSelectRowAtIndexPAth"));
UIStoryboard *mystoryboard = [UIStoryboard storyboardWithName:@"myStoryBoardName" bundle:nil];
self.detailsViewController = [mystoryboard instantiateViewControllerWithIdentifier:@"detailviewcontroller"]
/* The below NSlog is showing the content , its not null still in next viewcontroller same variable showing null content*/
NSLog(@"My Dictionary: This is a MasterView%@",detailViewController.myDictionary);
[self performSegueWithIdentifier:@"showDetail" sender:self];
}
Вы должны установить идентификатор своего элемента detailViewController в storyBoard.
NSLog для словаря по-прежнему показывает нулевое значение. – Vishal
Вам необходимо назначить словарь в методе prepareForSegue:.
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { DetailViewController *viewController = = (DetailViewController *)[segue destinationViewController]; detailViewController.myDictionary = //YOUR Dictionary here; }
Таким образом, этот же словарь можно получить в viewDidLoad: из DetailViewController.
Примечание. Обязательно укажите словарь.
Надеюсь, что это поможет.
OMG. Зачем?!!! Я не могу передать dict так: 'dvc.dataArguments = [словарь NSDictionaryWithObject: self.selectedDate forKey: kDateKey];' или вот так: 'NSDictionary * arguments = @ {self.selectedDate: kDateKey}; viewController.dataArguments = arguments; '. Вместо этого мне нужно сделать это: 'dvc.dataArguments = [[NSDictionary alloc] initWithObjectsAndKeys: self.selectedDate, kDateKey, nil];' для получения данных в '- (void) viewWillAppear: (BOOL) animated'. Ahhhh ... –
Вы создаете новый контроллер представления в didSelectRowAtIndexPath
, и в конце концов вы звоните prepareForSegue
метод ... который создаст новый экземпляр, поэтому вы должны установить данные, которые вы хотите отправить в новом контроллере представления в prepareForSegue
методе как это.
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
//
if ([[segue identifier] isEqualToString:@"name_of_ur_segue"])
{
// Get reference to the destination view controller
DetailViewController *detailViewController = [segue destinationViewController];
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
// Pass any data here ...
detailViewController.myDictionary = [self.placeArray objectAtIndex:[indexPath row]];
}
}
Edit:
Как вы доступ к данным в методе ViewDidLoad и в прошивке 7 данных, передаваемых как это не доступен в методе ViewDidLoad. Поскольку логика представления контроллера представлений бит теперь изменилась. Теперь мы можем передавать данные в initMethod, если мы хотим получить доступ к этому в viewDidLoad
. Или получить к нему доступ в viewWillAppear
или viewDidApepar
. Если вы хотите вызвать этот код только один раз в viewDidAppear или ViewWillApepar, просто установите флаг boolean, который может определить, хотите ли вы получить доступ к этому или нет.
Не работает, просто можно увидеть данные в NSlog того же viewController. – Vishal
Показать код из detailViewController, поэтому я могу видеть, что вы делаете с этими данными и где. На самом деле в iOS 7, если вы будете получать данные, которые передаются, как это в ViewDidLoad, methodyou получит нулевой ответ. Вы должны получить доступ к этим данным после viewDidLoad в viewWillAppear или ViewDidAppear ... –
Я добавил только в viewDidLoad, что мне делать? – Vishal
- 1. Данные контроллера не переданы в директиву
- 2. данные не переданы в ответе угловым
- 3. Ответ Данные не переданы через json
- 4. Контроллер навигации iOS не переключается на следующий контроллер просмотра
- 5. Http post request данные не переданы
- 6. Деятельность в следующий раз Деятельность
- 7. angularJS контроллер не загружается в первый раз
- 8. Данные переданы из контроллера представления, возвращающего null
- 9. MeteorJS данные переданы к шаблону
- 10. следующий контроллер не загружен при выполнении сеанса
- 11. Как проверить, переданы ли данные в ajax
- 12. Данные не могут быть переданы в базу данных MVC3
- 13. Контроллер не получает данные?
- 14. угловой контроллер несколько раз
- 15. angularjs 2 и данные не будут переданы в маршрут params
- 16. - один раз только контроллер работает не один раз в Jmeter?
- 17. Получить данные модели от Razor переданы в файл нокаута
- 18. Как показать контроллер таблеток в следующий Просмотреть
- 19. данные не объединены в следующий код
- 20. Данные PHP переданы как строка вместо целого
- 21. Почему все данные передаются функции «явно переданы»?
- 22. Угловой контроллер не отображает данные
- 23. Функция, которая уже работает, не вызывает ее в следующий раз
- 24. контроллер не получает данные просмотра
- 25. Контроллер не запрашивает служебные данные
- 26. Данные Jsp не переданы контроллеру с использованием Spring
- 27. Данные не переданы должным образом на сервер php
- 28. Контроллер печати не будет отображаться один раз
- 29. Jquery данные в контроллер
- 30. Как я могу сохранить регистрационные данные в локальном хранилище, не перезаписывая его в следующий раз?
Где метод prepareForSegue получает переменную indexPath? – Abizern
@Abizern i обновил мой код, а затем проверил его – Muralikrishna