0

NSMutableArrayの記事(NSString *タイトルを含むカスタムクラス)のオブジェクトは、あるメソッド(デバッガでチェックインされている)で正しく読み込まれますが、別のメソッドオブジェクトは(title変数のような)いくつかのクラス変数を「忘れる」ようです。ここでNSMutableArrayをカスタムオブジェクトでいっぱいにする

条はNSMutableArrayのにオブジェクトをロードするコードです:私が立ち往生してきた

NSString *cellValue = @"ddd"; 
//NSArray * tempArray; 
Article * a; 
if([sectionTitle isEqualToString:@"Features"]) a = [featuresArticles objectAtIndex:indexPath.row]; 
if([sectionTitle isEqualToString:@"News"]) a = [newsArticles objectAtIndex:indexPath.row]; 
if([sectionTitle isEqualToString:@"Sports"]) a = [sportsArticles objectAtIndex:indexPath.row]; 
if([sectionTitle isEqualToString:@"Leisure"]) a = [leisureArticles objectAtIndex:indexPath.row]; 
if([sectionTitle isEqualToString:@"Voices"]) a = [voicesArticles objectAtIndex:indexPath.row]; 
if([sectionTitle isEqualToString:@"Editorial"]) a = [editorialArticles objectAtIndex:indexPath.row]; 
if([sectionTitle isEqualToString:@"Page 13"]) a = [page13Articles objectAtIndex:indexPath.row]; 

cellValue = [a getTitle]; 

for(int i=0;i<[articleURLs count];i++) { 
    Article * a = [[Article alloc] init]; 
    [a initWithWebsite:[articleURLs objectAtIndex:i]]; 
    if([sectionTitle isEqualToString:@"Features"]) [featuresArticles addObject:a]; 
    if([sectionTitle isEqualToString:@"News"]) [newsArticles addObject:a]; 
    if([sectionTitle isEqualToString:@"Sports"]) [sportsArticles addObject:a]; 
    if([sectionTitle isEqualToString:@"Leisure"]) [leisureArticles addObject:a]; 
    if([sectionTitle isEqualToString:@"Voices"]) [voicesArticles addObject:a]; 
    if([sectionTitle isEqualToString:@"Editorial"]) [editorialArticles addObject:a]; 
    if([sectionTitle isEqualToString:@"Page 13"]) [page13Articles addObject:a]; 
    [a release]; 
} 

、ここでは、これらの値を探し、別のメソッドのコードですこれは現在24時間以上にわたって、インターネットは助けにはならない。助言がありますか?

+0

膨大な数の配列変数を持つのではなく、1つのNSDictionary/NSMutableDictionary変数に、あなたが持つキー( '@"機能 "、" @ "ニュース" – dreamlax

+0

たとえば、 'articles'という名前のNSDictionaryを持つことができ、特定のカテゴリに記事を追加するには、' [[articles objectsForKey:sectionTitle] addObject:a]; 'を実行します。 '[[objects objectsForKey:sectionTitle] objectAtIndex:indexPath.row];'を使用します。 – dreamlax

+0

"クラス変数"とは、 "インスタンス変数"(ivar)を意味しますか? 'title' ivarは問題の変数の1つなので、どのように宣言されているのか、どのように割り当てているのかを見ることができます。 ( 'Articles'' @interface'ブロック... – FluffulousChimp

答えて

0

あなたのプロパティは、クラスのインターフェイスで正しく宣言されていない可能性があります。それは次のようになります。あなたは可変文字列を使用してプロパティを設定する場合は、あなたのクラスは、文字列の不変のコピーを作成しますので、

@interface Article : NSObject 
{ 
} 

@property (nonatomic,copy) NSString *title; 

@end 

copyは、文字列プロパティに最適です。単にretainとすると、クラスがなくても変更可能な文字列が変更される可能性があります。

+0

私はそれを保持していましたが、コピーするように変更しましたが、それでも動作しません。あなたの辞書reccomendation実際にははるかに優れたオプションです)と返信してください。 – eaganr

+0

NSMutableDictionaryの使用ははるかにクリーンですが、まだ運がありません。タイトル変数は保持されません。何とか上書きされていますか?あなたの助け – eaganr

+0

@eaganr:あなたのコードのどこかに問題があるかもしれません。時にはメモリリークが非常に奇妙な方法で現れることがあります。 'Article'クラスをどのように割り当てているのかという問題は、あなたがそれにタイトルを割り当てる方法ではなく、 – dreamlax

0

カスタムクラス(記事)では、クラスArticle.mファイルに設定した後に[title retain];と書く必要がありました。

関連する問題