Как добавить объект в NSMutableArray в Objective C? - PullRequest
2 голосов
/ 19 декабря 2010
NSMutableArray *tblContents =  [NSMutableArray arrayWithObjects: @"1", @"2", @"3", nil];
[tblContents addObject:txtNewTableRow.text];

Мое приложение аварийно завершает работу в строке 2. Сообщение об ошибке в консоли «NSInvalidArgumentException», причина: '- [NSCFString addObject:]: нераспознанный селектор, отправленный экземпляру xxx

Кстати, он работает нормальноесли я заменю инициализацию arraywithobjects на alloc & init!

, я просто создаю изменяемый массив и добавляю к нему объект.В чем проблема?

Спасибо, Шридхар Редди

Полный код: .h:

#import <UIKit/UIKit.h>

@interface TableStarterViewController : UIViewController
<UITableViewDelegate, UITableViewDataSource>
{
    NSMutableArray *tblContents;

    IBOutlet UITextField *txtNewTableRow;
    IBOutlet UITableView *tblMain;
}

@property (nonatomic, retain) NSMutableArray *tblContents;
@property (nonatomic, retain) UITextField *txtNewTableRow;
@property (nonatomic, retain) UITableView *tblMain;

-(IBAction) addRowToTable;

@end

.m:

#import "TableStarterViewController.h"

@implementation TableStarterViewController

@synthesize tblContents;
@synthesize txtNewTableRow;
@synthesize tblMain;

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [tblContents count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [[UITableViewCell alloc] 
                             initWithStyle:UITableViewCellStyleDefault 
                             reuseIdentifier:@"cell"];

    cell.textLabel.text = [tblContents objectAtIndex:indexPath.row];

    return cell;
}

-(IBAction) addRowToTable
{
    [tblContents addObject:txtNewTableRow.text];

    [tblMain reloadData];
}

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    tblContents =  [NSMutableArray arrayWithObjects: @"1", @"2", @"3", nil];


    [super viewDidLoad];
}

Это всекод.

Ответы [ 3 ]

2 голосов
/ 20 января 2012

вместо

tblContents =  [NSMutableArray arrayWithObjects: @"1", @"2", @"3", nil];

попробуйте,

tblContents =  [NSMutableArray initWithObjects: @"1", @"2", @"3", nil];
2 голосов
/ 19 декабря 2010

Вы не сохраняете массив, и он автоматически высвобождается перед его использованием.Обязательно сохраните его после того, как вы вернете указатель из arrayWithObjects.

Кроме того, мне не ясно, что arrayWithObjects вернет изменяемый массив.Что, если нет, вызовет дальнейшие проблемы.

Редактировать 1: Alloc и Init возвращают объект с сохранением счетчика 1;arrayWithObjects возвращает объект с счетом сохранения 0.

Редактировать 2: Я вытащил Xcode и убедился, что [NSMutableArray arrayWithObjects:] возвращает NSMutableArray (или, согласно Xcode, __NSArrayM)

0 голосов
/ 19 декабря 2010

Как упомянуто aepryus, arrayWithObjects наследуется от NSArray и может фактически возвращать NSArray. Отсюда и проблема. Кто-нибудь знает, как инициализировать NSMutableArray с объектами?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...