NSMutableArray *tblContents = [NSMutableArray arrayWithObjects: @"1", @"2", @"3", nil];
[tblContents addObject:txtNewTableRow.text];
我的应用程序在第2行崩溃。 控制台中的错误消息是 'NSInvalidArgumentException',原因:' - [NSCFString addObject:]:无法识别的选择器发送到实例xxx
顺便说一下,如果我用alloc& amp替换arraywithobjects初始化,它的工作正常。 INIT!我只是创建一个可变数组并向其添加一个对象。那里的问题是什么?
由于 Sridhar Reddy
完整代码: .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];
}
这就是所有代码。
答案 0 :(得分:2)
您没有保留阵列,并且在使用之前它已被自动释放。从arrayWithObjects返回指针后,确保保留它。
另外,我不清楚arrayWithObjects是否会返回一个可变数组。如果没有,将导致进一步的问题。
编辑1: Alloc和Init返回一个保留计数为1的对象; arrayWithObjects返回一个保留计数为0的对象。
编辑2: 我拿出Xcode并验证[NSMutableArray arrayWithObjects:]返回一个NSMutableArray(或根据Xcode a __NSArrayM)
答案 1 :(得分:2)
代替,
tblContents = [NSMutableArray arrayWithObjects: @"1", @"2", @"3", nil];
试试这个,
tblContents = [NSMutableArray initWithObjects: @"1", @"2", @"3", nil];
答案 2 :(得分:0)
正如aepryus所提到的,arrayWithObjects是从NSArray继承的,它实际上可能正在返回NSArray。因此问题。 任何人都知道如何使用对象初始化NSMutableArray?