1

私は Objective C と iOS の開発全般に不慣れなので、含める必要がある情報を見逃していた場合はお知らせください。最善を尽くします。同時に、もし私の推測が間違っていたり、まったくばかげた設定をしていたり​​したら、遠慮なく私に怒鳴ってください。ありがとう!

というクラスオブジェクトがありますfeeds。.h ファイルで初期化する方法は次のとおりです。

@interface ClassViewController : ContentViewController <UITableViewDelegate,
UITableViewDataSource> {
    NSMutableArray *feeds;
}
@property (nonatomic, strong) NSMutableArray* feeds;

そして.mで:

@dynamic feeds;

JSON から結果を取得して、feeds. resArr正しいデータが含まれていると仮定しましょう:

NSArray *resArr = [results objectForKey:@"data"];

if([self->feeds count]) {
    [self->feeds removeAllObjects];
    [self->feeds addObjectsFromArray:resArr];
 }
 else {
     self->feeds = [[NSMutableArray alloc] initWithArray:resArr];
 }

これで、初回 (つまり、初めてデータを配列に入れるとき) は正常に動作しますが、その後は次のエラーが発生します: *** -[NSMutableArray addObjectsFromArray:]: 配列引数は NSArray ではありません

私は無知です。何か案は?

編集: JSON 構造

1:

{"code":200,"data":[{"name":"ABM"},{"name":"ACC"}]}

2:

{"code":200,"data":{"100":{"subject":"ABM","title":"Decision Making in Agri-Food"},"130":{"subject":"ABM","title":"Farm Management I"}}}
4

1 に答える 1

1

self->feeds の代わりに self.feeds を使用する必要があります。Cと Objective-C でのドット (“.”) 演算子と矢印 (“->”) 演算子の使用については、こちらを参照してください。

後続の時間が実際に NSArray であると確信していますか?

追加を編集

最初の JSON は単なる名前の配列のように見えますが、2 番目は 100、200 などでキー付けされた辞書です。そのため、JSON はこれを 100、200 などでキー付けされた辞書に変換します。

NSArray* resArr = [results objectForKey:@"data"];

if([self.feeds count]) {
    [self.feeds removeAllObjects];
    if([resArr isKindOfClass:[NSDictionary class]])
       [self.feeds addObjectsFromArray:resArr.allValues];
    else
       [self.feeds addObjectsFromArray:resArr];
 }
 else {
     self.feeds = [[NSMutableArray alloc] initWithArray:resArr];
 }
于 2012-12-07T15:27:33.150 に答える