2010-07-19 80 views
0

我想问一个关于目标C的问题。我曾经问过如何在过去的目标中声明一个二维数组,并获得二维数组。但是,我修改了一些代码并尝试显示数组的内容。我发现输入是错误的。任何人都可以帮我指出这个错误。目标中的二维数组C

 // Program: convent a 1D array into 2D array and retrieve the element in the array 
    // example 
    // dataArray[0]=First Name, [1]=Last Name, [2]=Tom, [3]=chan, [4]=May, ... 
    // I want to break the array into outerArray, interArray 

     NSString *temp; 

     outerDataArray = [[NSMutableArray alloc]init]; 
     innerDataArray = [[NSMutableArray alloc]init]; 

     for(int i=0; i<[dataArray count]; i++) 
     { 

      temp = [dataArray objectAtIndex:i]; 
      [innerDataArray addObject:temp]; 
      [temp release]; 

      if(i%[titleArray count] == 0 && i!=0) 
      { 
       [innerDataArray release]; 
       innerDataArray = [[NSMutableArray alloc]init]; 

       [outerDataArray addObject:innerDataArray]; 
      } 
     } 

     [innerDataArray release]; 

     NSMutableArray *tempArray; 

     // display 
     for(int i=0; i<[outerDataArray count]; i++) 
     { 
      tempArray = [outerDataArray objectAtIndex:i]; 

      for(int j=0; j<[innerDataArray count]; j++) 
      { 
       NSLog(@"%@", [tempArray objectAtIndex:j]); 
      } 

     } 

回答

1

当你达到一个计数 你面前直接释放它把它添加到outerDataArray它SEMS您添加到这个“innerDataArray”但后来:

 if(i%[titleArray count] == 0 && i!=0) 
     { 
      [innerDataArray release]; 
      innerDataArray = [[NSMutableArray alloc]init]; 

      [outerDataArray addObject:innerDataArray]; 
     } 

不应该是什么?

 if(i%[titleArray count] == 0 && i!=0) 
     { 
      [outerDataArray addObject:innerDataArray]; 
      [innerDataArray release]; 
      innerDataArray = [[NSMutableArray alloc]init]; 

     } 
1
 [temp release]; 

中的代码,你不保留temp,不应将其释放。

  [outerDataArray addObject:innerDataArray]; 

您添加一个空的innerDataArray,因此您可能会丢弃第一组条目。在释放innerDataArray之前将此行移至或在循环开始之前添加第一个innerDataArray。