Apple の Key Value Programming Guide を読んでいます。トピック「単純なコレクション演算子」で、私は次のように読みました。
次の例は、トランザクション内のオブジェクトのトランザクション金額の平均値を返します。
上記を使用できるプログラムを作成しようとしています。以下は、そのプログラムのファイルです。上記がうまくいかない理由を理解できません。
トランザクション.h
#import <Foundation/Foundation.h>
@interface Transaction : NSObject
{
NSString *payee;
NSNumber *amount;
NSDate *date;
}
- (void) setPayee: (NSString *) aP
setAmount: (NSNumber *) aN
setDate: (NSDate *) aD;
@end
Transaction.m #import "Transaction.h"
@implementation Transaction
- (void) setPayee: (NSString *) aP
setAmount: (NSNumber *) aN
setDate: (NSDate *) aD
{
payee = aP;
amount = aN;
date = aD;
}
@end
TransactionDataBase.h
#import <Foundation/Foundation.h>
#import "Transaction.h"
@interface TransactionDataBase : NSObject
{
NSMutableArray *tArray;
}
- (id) objectInTArrayAtIndex: (NSUInteger) index;
- (void) insertObject: (Transaction *) tA
inTArrayAtIndex: (NSUInteger) index;
- (NSUInteger) countOfTArray;
@end
TransactionDataBase.m
#import "TransactionDataBase.h"
@implementation TransactionDataBase
- (id) init
{
self = [super init];
if (self) {
tArray = [[NSMutableArray alloc] initWithCapacity:40];
}
return self;
}
- (id) objectInTArrayAtIndex: (NSUInteger) index
{
return [tArray objectAtIndex:index];
}
- (void) insertObject: (Transaction *) tA
inTArrayAtIndex: (NSUInteger) index
{
[tArray insertObject:tA atIndex:index];
}
- (NSUInteger) countOfTArray
{
return [tArray count];
}
@end
main.m:
#import <Foundation/Foundation.h>
#import "Transaction.h"
#import "TransactionDataBase.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Transaction *t1 = [[Transaction alloc] init];
Transaction *t2 = [[Transaction alloc] init];
Transaction *t3 = [[Transaction alloc] init];
NSDate *nowDate = [[NSDate alloc] initWithString:@"2.4.2012"];
NSDate *nowDate2 = [[NSDate alloc] initWithString:@"2.4.2012"];
[t1 setPayee:@"c" setAmount:[NSNumber numberWithInt:3000] setDate:nowDate];
[t2 setPayee:@"c" setAmount:[NSNumber numberWithInt:5000] setDate:nowDate2];
[t3 setPayee:@"y" setAmount:[NSNumber numberWithInt:1000] setDate:nowDate2];
TransactionDataBase *db1 = [[TransactionDataBase alloc] init];
[db1 insertObject:t1 inTArrayAtIndex:0];
[db1 insertObject:t2 inTArrayAtIndex:1];
[db1 insertObject:t3 inTArrayAtIndex:2];
NSNumber *avgT = [db1 valueForKeyPath: "@avg.amount"];
NSLog(@"%@", avgT);
}
return 0;
}