我无法弄清楚为什么一旦我尝试使用[mainArray addObject:]表达式,我的整个程序就会失败!如果我传递它的字符串它工作得很好,但是一旦我尝试传递它变量失败,任何帮助?
#import "AG_ViewController.h"
#import "AG_Storage.h"
#import "AG_AddItemViewController.h"
@interface AG_ViewController ()
@end
@implementation AG_ViewController
- (void)viewDidLoad {
[super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib.
mainArray = [NSMutableArray array];
AG_Storage *item1 = [[AG_Storage alloc] init];
item1.itemName = @"Test";
NSLog(@"Add item1");
NSLog(@"%@",mainArray);
AG_Storage *item2 = [[AG_Storage alloc] init];
item2.itemName = @"Test2";
NSLog(@"Add item2");
[mainArray addObject:item1];
NSLog(@"%@", mainArray);
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return [mainArray count]; }
- (UITableViewCell *)tableView:(UITableView *)tableViewer cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableViewer dequeueReusableCellWithIdentifier:@"thisCell"];
cell.textLabel.text = [mainArray objectAtIndex:indexPath.row];
return cell; }
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated. }
@end
我在头文件中初始化了mainArray,
@interface AG_ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>{
IBOutlet UITableView *tableView;
NSMutableArray *mainArray;
}
日志如下:
2014-03-18 13:49:26.028 AgendaBk[22575:a0b] Add item1
2014-03-18 13:49:26.030 AgendaBk[22575:a0b] (
)
2014-03-18 13:49:26.030 AgendaBk[22575:a0b] Add item2
2014-03-18 13:49:26.031 AgendaBk[22575:a0b] (
"<AG_Storage: 0x895bdc0>"
)
2014-03-18 13:49:26.036 AgendaBk[22575:a0b] -[AG_Storage length]: unrecognized selector sent to instance 0x895bdc0
2014-03-18 13:49:26.039 AgendaBk[22575:a0b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[AG_Storage length]: unrecognized selector sent to instance
垃圾在这里
libc++abi.dylib: terminating with uncaught exception of type NSException
答案 0 :(得分:0)
注意(您可能实际上并没有在代码中使用它,但无论如何):别忘了NSMutableArray *mainArray = [NSMutableArray array]
尝试使用[mainArray addObjectsFromArray:@[item1, item2]];
答案 1 :(得分:0)
试试这种方式
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSMutableArray *mainArray = [NSMutableArray array];
AG_Storage *item1 = [[AG_Storage alloc] init];
item1.itemName = @"Test";
NSLog(@"Add item1");
NSLog(@"%@",mainArray);
AG_Storage *item2 = [[AG_Storage alloc] init];
item2.itemName = @"Test2";
NSLog(@"Add item2");
[mainArray addObjectsFromArray:[NSArray arrayWithObjects: item1, item2, nil]];
NSLog(@"%@",mainArray);
}
由于
答案 2 :(得分:0)
我认为您不太了解实例变量和局部变量之间的区别。如果您的第一个代码版本已编译但您尚未更改属性,那么您的第一个示例将NSMutableArray *分配给实例变量,其中它保持不变,直到该视图被释放,而第二个示例将NSMutableArray *分配给局部变量,一旦方法返回,ARC将解除分配它。 item1和item2也会消失。
强烈建议使用下划线(如_mainArray)启动实例变量,以使其更加明显。
抱歉,只是注意到是其他人将实例变量更改为本地变量。