2012-03-19 1 views
0

私のUITableViewでは配列をデータソースとして使用します。これまではすべてうまく動作します。しかし、私は奇妙な問題がある、私は検索フィールドを使用し、私は後で再び削除するいくつかの文字を入力すると、基になる配列は突然空です。ここに私の問題を理解するために、関連するかもしれないコードスニペット、:私の.hで配列が突然空です

宣言私の.mコードで

@interface dictionaryViewController : UIViewController <UITableViewDelegate>{ 
... 
... 
    NSMutableArray *cardArray; 

} 

... 
@property (retain) NSMutableArray *cardArray; 
... 

使用法:

@synthesize cardArray; 
... 

- (void)viewDidLoad { 
[super viewDidLoad]; 
self.cardArray = [[NSMutableArray alloc] initWithObjects:nil]; 
... 
} 

は、私がデータを持つ配列を移入します私のSQLデータベースから:

  [self.cardArray addObject:[NSString stringWithFormat:@"%@ - %@", aQuestion, anAnswer]]; 

そして、コード内では、cellForRow meth OD:私は、ログに

[self.cardArray removeAllObjects]; 
    self.cardArray=nil; 

:終わり

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
... 
thisCardIndex = [self.cardArray indexOfObject:cellValue]; 
... 
} 

私はこの(私が代わりにremoveObjectsを使用し、なぜ私は実際に、解放コマンドを使用して他のいくつかの問題を持っていた)のように、それを解放エラーは表示されません。しかし、デバッガは、コードがSIGABRTでクラッシュすることを示し、ブレークポイントを設定すると、原因が空のcardArrayであることがわかります。

前もってサポートいただきありがとうございます。

+2

はロジックが間違ってここにsomewhere..postウル全体.mファイルを起こっている... –

+1

とは、メソッドは '[self.cardArray removeAllObjects]。 self.cardArray = nil; '?おそらく、その方法の詳細を投稿する必要があります。リリースコマンドに問題がある場合は、赤い旗が必要です。 'removeAllObjects'を呼び出す必要はありません。配列プロパティをnilに設定すると、すべてのオブジェクトにリリースが送信されます。したがって、 'removeAllObjects'を呼び出さなければならない場合は、別の問題をマスクしています。 – SSteve

答えて

0

[OK]、最終的には[myArray release](以下のコメント行参照)でした。私は何の手がかりも持っていませんが、なぜでしょうか。これはローカル配列であり、私はローカルで定義しています。また、即座に再度リリースすることができるはずです。興味深いのは、このコードは検索が絞り込まれている限り機能するということです。検索フィールドが再び空になるとクラッシュします。非常に混乱しますが、多分誰かが説明をしていますか?とにかく、ついにそれを得て、それは期待どおりになった。

- (void) searchTableView { 

NSString *searchText = searchBar.text; 
NSMutableArray *searchArray = [[NSMutableArray alloc] initWithObjects:nil]; 

for (NSDictionary *dictionary in self.listOfItems) { 
    NSArray *myArray = [dictionary objectForKey:@"Cards"]; 
    [searchArray addObjectsFromArray:myArray]; 

// [myArray release]; }

// Counter is needed to get the index of the primary key to dislpay the card in editViewController 
int aCounter=0; 
for (NSString *sTemp in searchArray) { 
    NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch]; 

    if (titleResultsRange.length > 0) { 
     [self.aCopyListOfItems addObject:sTemp]; 
     NSInteger myPrimaryKey; 
     myPrimaryKey = [[self.cardIDArray objectAtIndex:aCounter] integerValue]; 
     [self.aCopyOfCardIDArray addObject:[NSNumber numberWithUnsignedInteger: myPrimaryKey]]; 
    } 
} 

[searchArray removeAllObjects]; 
searchArray = nil; 
} 
関連する問題