2014-01-08 3 views
0

У меня возникли проблемы с добавлением объектов в NSMutableArray. Я четко размещаю 2 объекта в массиве typeList, но счет отображается только как 1. Что я делаю неправильно?Создание NSMutableArray объектов

content.h

@interface TBContentModel : NSObject 

+(NSMutableArray*)typeList; 
+(void)setTypeList:(NSMutableArray*)str; 

content.m

static NSMutableArray *typeList = nil; 

@implementation TBContentModel 

- (id) init { 
    self = [super init]; 
    if (self) { 
     typeList = [NSMutableArray array]; 
    } 
    return self; 
} 

contentviewcontroller.m

@implementation TBViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    NSString *jsonString = @"[{\"Content\":268,\"type\":\"text\"},{\"Content\":65,\"type\":\"number\"}]"; 
    NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; 
    NSMutableArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; 
    for (NSMutableDictionary *dictionary in array) 
    { 
     TBContentModel *test = [[TBContentModel alloc] init]; 
     test.type = dictionary[@"type"]; 
     [[TBContentModel typeList] addObject:test]; 
     NSLog(@"%@", test.type); 
    } 
} 

- (IBAction)tapButton:(id)sender { 
    NSLog(@"%d", [TBContentModel.typeList count]); // always shows 1 
} 
+5

Пожалуйста, сократить количество кода в вашем примере и выделить, где проблема. – trojanfoe

+1

вырезать код. Я новичок, поэтому не был уверен, какой код был связан с проблемой. – Sancho

ответ

1

Вы воссоздающий статический typeList объект каждый раз вы выделить и инициализировать новый TBContentModel объект.

Внести следующие изменения:

static NSMutableArray *typeList = nil; 
static dispatch_once_t once; 

+ (NSMutableArray*)typeList { 
    dispatch_once(&once, ^{ 
     typeList = [NSMutableArray array]; 
    }); 
    return typeList; 
} 

и удалите следующую строку из метода init:

typeList = [NSMutableArray array]; 
+0

спасибо! Это решило! – Sancho

+0

@ Санчо Вы также должны удалить свой метод 'setTypeList:'. – trojanfoe

+0

ОК. Сделаю. Я предполагаю, что вы предлагаете это, потому что нет оснований для установки теперь, когда я могу добавлять объекты непосредственно к нему. – Sancho

Смежные вопросы