将对象添加到NSMutableArray时超出范围错误

时间:2011-09-18 17:37:28

标签: objective-c nsmutablearray

我正在尝试将一个类对象添加到NSMutableArray中,但是在添加它之后该对象似乎超出了范围。

接口:

#import <Cocoa/Cocoa.h>

@class Person;

@interface MyDocument : NSDocument
 {
    NSMutableArray *employees;
    IBOutlet NSTableView *raiseTableView;
 }

- (IBAction)createEmployee:(id)sender;
- (IBAction)deleteSelectedEmployees:(id)sender;
@end

.m文件的一部分:

#import "MyDocument.h"
#import "Person.h"
@implementation MyDocument


- (id)init
{
    self = [super init];
    if (self) {
        employees = [[[NSMutableArray alloc] init]retain];
    }
    return self;
}


- (IBAction)createEmployee:(id)sender
{
    Person *newEmployee = [[Person alloc] init];
    [employees addObject:newEmployee];
    NSLog(@"personName is: %@, expectedRaise is: %f", newEmployee.personName, newEmployee.expectedRaise);
    [newEmployee release];
    [raiseTableView reloadData];
}

NSLog正确打印所有内容。当我看到员工时,它会显示添加了一个对象,当我查看对象时,它有一个符号超出范围,当我尝试打印它时,我得到null结果。因此,当它试图重新加载数据时会爆炸。有人给我一个关于我忘记了什么的提示吗?感谢。

TableView代码:

#pragma mark Table view datasource methods

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tempTableView
{
    return [employees count];
}

- (id)tableView:(NSTableView *)tempTableView objectValueForTableColumn:(NSTableColumn *)tempTableColumn row:(NSInteger)rowIndex
{
    // What is the identifier for the column?
    NSString *tempIdentifier = [tempTableColumn identifier];

    // What person?
    Person *tempPerson = [employees objectAtIndex:rowIndex];

    // What is the value of the attribute named identifier?
    return [tempPerson valueForKey:tempIdentifier];
}

- (void)tableView:(NSTableView *)tempTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)tempTableColumn row:(NSInteger)rowIndex
{
    NSString *tempIdentifier = [tempTableColumn identifier];
    Person *tempPerson = [employees objectAtIndex:rowIndex];

    // Set the value for the attribute named identifier
    [tempPerson setValue:anObject forKey:tempIdentifier];
}

1 个答案:

答案 0 :(得分:1)

我认为它正在崩溃,因为这一行:

NSString *tempIdentifier = [tempTableColumn identifier];

为tempIdentifier返回null,以便将null字符串传递给Person类:

NSString *tempIdentifier = [tempTableColumn identifier];

导致错误消息的原因。您应该打印出tempIdentifier的值以确定。

您是否在InterfaceBuilder中为TableView中的每一列设置了标识字段?