私はここ数週間、まっすぐなObjective-cを使用してきましたが、最近、その分野で始めるために小さなcocoamacアプリを構築しています。私は今、IBとCocoaで遭遇したいくつかの癖を理解しようとしていますが、どちらもオブジェクトスコープに関連していると確信しています。
以下は問題の私のファイルです。他のインポートで特別なことは何も起こっていません。ここで奇妙なのは、 selfでクラスインスタンスをターゲットにしている場合でも、リスト変数が2つの異なる配列をログに記録することです。このキーワードを間違って使用しているのかもしれませんし、明らかな何かが欠けているのかもしれませんが、いずれにしても、私のリスト変数は、updateメソッドとcreateメソッドの両方によって確実に独立して追跡されます。
2番目の問題は、IBActionによってトリガーされない場合、 createメソッドが機能しないことです。現在、テーブルビューをupdateメソッドでリロードするために、別のボタンにチェーンしています。createメソッドをvoidに設定し、そのメソッドを別のコントローラーから直接呼び出すと、なぜ機能しないのですか?
#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