Мое приложение падает, когда я выбираю ячейку в табличном представлении, но я не могу найти, где в коде происходит сбой
Я пытаюсь перейти от табличного представления к подробному представлению. Когда я нажимаю на ячейку, она падает. Я использовал разрывы, чтобы попытаться найти, где в коде происходит сбой, но я не могу найти конкретную строку. Сбой при выполнении перехода из табличного представления в подробное представление. Я хотел бы передать некоторые переменные в подробный вид, но сначала мне нужно, чтобы он переключился в подробный вид. Я использую раскадровку. Любая помощь будет оценена.
ОБНОВЛЕНИЕ: журнал сбоев выглядит следующим образом
arg c = (int) 1
arg v = (char **) 0x2fd63cdc
Это линия, на которой происходит сбой
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
ОБНОВЛЕНИЕ 2
Последний раздел кода перед его сбоем, когда я прохожу код, - это функция подготовки к переходу. После последней строки кода он вылетает и переходит на строку выше.
ОБНОВЛЕНИЕ 3
Я понял, что консоль была скрыта, так что это ошибка, которая появляется в консоли. Оба моих nslogs в подготовке к переходу назывались.
Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<DetailViewController 0x1e098bd0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key name.'
*** First throw call stack:
(0x3a1e63e7 0x39072963 0x3a1e60d5 0x3a418fe9 0x3a414d53 0x3a16c8a5 0x39665d7d 0x396655ff 0x3955e039 0x394e8421 0x3953d1b7 0x3953d0fd 0x3953cfe1 0x3953cf0d 0x3953c659 0x3953c541 0x3952ab33 0x3952a7d3 0x3958b2ad 0x3960dca1 0x3a4b9e67 0x3a1bb857 0x3a1bb503 0x3a1ba177 0x3a12d23d 0x3a12d0c9 0x3746633b 0x3951d291 0x69a9 0x3a91eb20)
libc++abi.dylib: terminate called throwing an exception
RootViewController.m
#import "RootViewController.h"
#import "DetailViewController.h"
@implementation RootViewController
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
//Initialize the array.
listOfItems = [[NSMutableArray alloc] init];
//Add items
[listOfItems addObject:@"Jane"];
[listOfItems addObject:@"Johnny"];
[listOfItems addObject:@"Deanne"];
[listOfItems addObject:@"John"];
[listOfItems addObject:@"Susan"];
//Set the title
self.navigationItem.title = @"Countries";
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [listOfItems count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"MyCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Set up the cell...
NSString *cellValue = [listOfItems objectAtIndex:indexPath.row];
cell.textLabel.text = cellValue;
return cell;
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
DetailViewController *DVC = [[DetailViewController alloc]init];
DVC = [segue destinationViewController];
NSIndexPath *path = [self.tableView indexPathForSelectedRow];
NSString *name = [listOfItems objectAtIndex:path.row];
DVC.name1.text = name;
}
RootViewController.h
#import <UIKit/UIKit.h>
@interface RootViewController : UITableViewController <UITableViewDataSource,UITableViewDelegate> {
NSMutableArray *listOfItems;
IBOutlet NSMutableArray *detailListOfItems;
}
@end
DetailViewController.m
#import "DetailViewController.h"
@implementation DetailViewController
@synthesize selectedCountry;
@synthesize name1;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
//Set the title of the navigation bar
//self.navigationItem.title = name1.text;
}
DetailViewController.h
#import <UIKit/UIKit.h>
@interface DetailViewController : UIViewController
@property (nonatomic,strong) IBOutlet UILabel *name1;
@property (nonatomic, retain) NSString *selectedCountry;
@end
2 ответа
Добавить точку останова исключения....
Вот вкладка вверху:
Вам нужно выбрать второй последний значок точки останова. Нажмите на это и посмотрите внизу значок добавления:
Затем нажмите добавить и создайте точку останова исключения и измените ее для этих параметров:
И вот ваше исключение точки останова!
Затем запустите ваше приложение, и оно должно рухнуть на вашей линии, где оно падает. Вы можете увидеть некоторый журнал сбоев, и возможно, вам придется изменить схему на GDB
Обновить
Есть ли какой-либо журнал аварий или трассировка стека? Кроме того, попробуйте изменить схему на GDB... вот как:
Переход на GDB обычно исправляет это. Если вы уже используете GDB, переключитесь на LLDB и посмотрите, что произойдет!
Примечание: как вы написали,
arg c = (int) 1
arg v = (char **) 0x2fd63cdc
Это не ваш журнал аварий...
Обновить
Если это все еще не работает, вы должны поставить точки останова и NSLog()
повсюду для отладки и выяснения позиции вашего плохого аварийного кода!
Обновить
Послушайте, мы, очевидно, не можем выяснить, где происходит сбой, но я мог бы точно понять, где происходит сбой и почему. Это связано с вашим видом таблицы и listOfItems
, Обычно табличное представление перезагружает свои данные и вызывает их методы делегата и источника данных непосредственно перед или одновременно viewDidLoad
код вызывается. Так что перенесите инициализацию и добавление объектов listOfItems
в viewWillAppear
и посмотрим, что получится.
Обновить
Проверьте все ваши розетки в раскадровке и в DetailViewController
и убедитесь, что они не связаны с тем, что больше не существует
Вот решение: проверьте имя вашего идентификатора ячейки и примените этот идентификатор к вашему segue. У каждого Segue есть идентификатор. По умолчанию пусто. Так что попробуйте назначить имя, похожее на ваш код, в частности, segue, которое идет к вашим деталям. просмотр контроллера.