Ошибка вне области при добавлении объекта в NSMutableArray - PullRequest
0 голосов
/ 18 сентября 2011

Я пытаюсь добавить объект класса в 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 печатает все правильно.Когда я смотрю на сотрудников, он показывает 1 добавленный объект, когда я смотрю на объект, он имеет обозначение, что он находится вне области видимости, и когда я пытаюсь распечатать его, я получаю нулевое значение для результата.Следовательно, когда он пытается перезагрузить данные, вещи взрываются.Кто-нибудь подскажет, что я забыл?Спасибо.

Код 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 Ответ

1 голос
/ 20 сентября 2011

Я думаю, что происходит сбой, потому что эта строка:

NSString *tempIdentifier = [tempTableColumn identifier];

возвращает нулевое значение для tempIdentifier, так что нулевая строка передается классу Person здесь:

NSString *tempIdentifier = [tempTableColumn identifier];

Который вызывает сообщение об ошибке.Вы должны распечатать значение tempIdentifier, чтобы быть уверенным.

Вы установили поле идентификации для каждого столбца в вашем TableView в InterfaceBuilder?

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