0

几周以来,我一直在使用直接 Objective-c,最近我一直在构建小型可可 mac 应用程序以开始这方面的工作。我现在正试图找出我在使用 IB 和 Cocoa 时遇到的一些怪癖,而且我相当肯定两者都与对象范围有关。

下面是我有问题的文件,其他导入并没有什么特别之处。这里奇怪的是,我的list变量将记录两个不同的数组,即使我使用self来定位类实例。也许我用错了这个关键字,或者我只是遗漏了一些明显的东西,但无论哪种方式,我的list var 肯定是由 update 和 create 方法独立跟踪的。

我的第二个问题是,如果不是由 IBAction 触发,我的create方法将不起作用。目前,我已将其链接到一个单独的按钮,以使用更新方法重新加载我的表格视图。如果我将它设置为void并直接从另一个控制器调用该方法,为什么我的create方法将不起作用?

#import "Lesson_14AppDelegate.h"
#import "TableViewController.h"
#import "Transaction.h"

@implementation TableViewController

@synthesize list, transaction;

- (id) init
{   
    self = [super init];
    if (self) 
    {
        Transaction *aTransaction = [[Transaction alloc] init];
        transaction = aTransaction;
        list = [[NSMutableArray alloc] init];
    }

    return self;
}

- (NSInteger) numberOfRowsInTableView: (NSTableView *) tableView 
    {
    return [self.list count];
}

- (id) tableView: (NSTableView *) tableView objectValueForTableColumn:(NSTableColumn *) tableColumn row: (NSInteger) row 
{
    Transaction *t = [self.list objectAtIndex:row];
    NSString *identifier = [tableColumn identifier];
    return [t valueForKey:identifier];
}

- (IBAction) update: (id) sender
{   
    [self.list addObject: self.transaction];
    [tableView reloadData];

    NSLog(@"list: %@", self.list);  
}

- (IBAction) create: (float) amount : (NSString *) description
{               
    [self.list addObject: description]; 
    [tableView reloadData];

    NSLog(@"list: %@", self.list);      
}

- (void) dealloc
{
    [self.list release];
    [self.transaction release];
    [super dealloc];
}

@end
4

0 回答 0