我正在尝试将一个类对象添加到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];
}
答案 0 :(得分:1)
我认为它正在崩溃,因为这一行:
NSString *tempIdentifier = [tempTableColumn identifier];
为tempIdentifier返回null,以便将null字符串传递给Person类:
NSString *tempIdentifier = [tempTableColumn identifier];
导致错误消息的原因。您应该打印出tempIdentifier的值以确定。
您是否在InterfaceBuilder中为TableView中的每一列设置了标识字段?