几周以来,我一直在使用直接 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