代码之家  ›  专栏  ›  技术社区  ›  vodkhang

initwithcoder和initwithnibname

  •  1
  • vodkhang  · 技术社区  · 14 年前

    我试图在uitableviewcontroller中编码一些数据状态。第一次,我用nibname初始化对象没有任何问题。但是,当我initwithcoder时,uitableviewcontroller仍然加载,但是当我单击一个单元格时,应用程序崩溃,调试器告诉我exec_bad_access,内存有问题,但是我不知道

    这是我的代码:

    - (id) init {
        if(self = [self initWithNibName:@"DateTableViewController" bundle:nil]) {        
            self.dataArray = [[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3", nil];
        }
        return self;
    }
    
    // Customize the appearance of table view cells.
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
        static NSString *CellIdentifier = @"Cell";
    
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        }
    
        // Set up the cell...
        int index = indexPath.row;
     cell.textLabel.text = [self.dataArray objectAtIndex:index];;
        return cell;
    }
    - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
        return @"Test Archiver";
    }
    - (void)encodeWithCoder:(NSCoder *)coder {
        [super encodeWithCoder:coder];
        [coder encodeObject:self.dataArray];
    }
    - (id)initWithCoder:(NSCoder *)coder {
     return [self init];
    }
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
        int index = indexPath.row;
        [self.dataArray addObject:[NSString stringWithFormat:@"Hello %d", index]];
        [self.tableView reloadData];
    }
    
    2 回复  |  直到 14 年前
        1
  •  1
  •   Nikolai Ruhe    14 年前

    我在这里看到两个问题:

    1)您正在序列化 dataArray 使用 encodeObject: 但是忽略了反序列化 initWithCoder:

    2)你应该使用 NSKeyedArchiver 方法 encodeObject:forKey: . 然后您可以在解码中自由使用序列化信息。

    除此之外,我只能说,回答你的问题,这将有助于包括有关坠机地点的信息。

        2
  •  1
  •   Nikolai Ruhe    14 年前

    此代码中只有一个内存问题:in init 你在泄露 NSMutableArray . 但你要找的问题正好相反。你描述的错误不在发布的代码中。