【问题标题】:Crashing Application with self.tableview reloadData使用 self.tableview reloadData 崩溃的应用程序
【发布时间】:2014-03-09 07:58:21
【问题描述】:

我在 XCode 中使用两个 TableViewController 做一个简单的应用程序,单击第一个会将您带到第二个输入您的名字的位置,但是我在显示“self.tableView reloadData”的行处崩溃,我该如何解决这个问题? 我到了主线并说 Thread 1:signal SIGABRT argv 字符 ** 0xbfffed90 0xbfffed90 *argv char * "/Users/maciosdeveloping/Library/Application Support/iPhone Simulator/7.0.3/Applications/20050884-B77A-47FC-98B6-500B5D44D9FB/EjemloModal.app/EjemloModal" 0xbffeff10 **argv char '/' '/' argc int 1 1

NSMutableArray *alumnos;

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([segue.identifier isEqualToString:@"transicion"]){
    UINavigationController *navigationController=segue.destinationViewController;
    MODetalleViewController *moDetalleViewController =[[navigationController viewControllers]objectAtIndex:0];
    moDetalleViewController.delegate=self;
}
}

- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
    // Custom initialization
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];
alumnos=[NSMutableArray array];
}

-(void)viewDidUnload{
[self viewDidUnload];
alumnos=nil;
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [alumnos count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Alumno";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

// Configure the cell...

cell.textLabel.text=[alumnos objectAtIndex:indexPath.row];
return cell;
}

#pragma mark Protocolo de detalle

-(void)AlumnoDetallesViewControllerDelegateDidCancel:(MODetalleViewController *)controller{
[self dismissViewControllerAnimated:YES completion:nil];
}

-(void)AlumnoDetallesViewControllerDelegateDidSave:(MODetalleViewController *)controller{
[self dismissViewControllerAnimated:YES completion:nil];
[alumnos addObject:controller.nombre.text];
[self.tableView reloadData];
}

【问题讨论】:

  • 能否请您发布崩溃日志。
  • 我感觉“self.tableView”连接不正确。

标签: objective-c uitableview crash


【解决方案1】:
-(void)viewDidUnload{
[self viewDidUnload];
alumnos=nil;
}

这将进入无限循环。正确[super viewDidUnload]

把dismiss代码放在方法的最后试试!

-(void)AlumnoDetallesViewControllerDelegateDidSave:(MODetalleViewController *)controller{

[alumnos addObject:controller.nombre.text];
[self.tableView reloadData];
[self dismissViewControllerAnimated:YES completion:nil];
}

【讨论】:

  • 是的,我错了。然而这并不能解决问题。感谢您的帮助
  • 能否请您发布崩溃日志?
  • 您正在关闭 viewController 并访问它的属性!当您关闭 ViewController 时,它会调用 viewDidUnload: 并且您无法访问局部变量。所以最后关闭 viewController !这有帮助吗?
【解决方案2】:

我认为问题可能是由于访问了您同时解雇的控制器的成员:

-(void)AlumnoDetallesViewControllerDelegateDidSave:(MODetalleViewController *)controller{
   [self dismissViewControllerAnimated:YES completion:nil];
   [alumnos addObject:controller.nombre.text];
   [self.tableView reloadData];
}

尝试:

[alumnos addObject:[controller.nombre.text copy]];

这会将您在详细控制器视图中输入的文本的副本添加到您的数据源。

更好的建议是让您的数据源成为您应用的模型(如在 Model-View-Controlelr 中)的一部分。因此,当用户输入新的详细信息时,您的详细视图控制器将更新应用模型;主视图控制器可以从模型而不是从细节控制器访问新数据。

(如果你不使用ARC,这会产生内存泄漏,顺便说一句,你应该添加autorelease

【讨论】:

    猜你喜欢
    • 2012-03-27
    • 2011-04-05
    • 1970-01-01
    • 2021-05-02
    • 2015-08-13
    • 2023-03-25
    • 2017-11-10
    • 2012-08-18
    • 2012-02-12
    相关资源
    最近更新 更多