カテゴリについて学ぶ前に、生成された NSManagedObject サブクラスでエンティティのメソッドを宣言しました。
// UserRecording.h
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
#import <AVFoundation/AVFoundation.h>
@interface UserRecording : NSManagedObject {
AVAudioPlayer *audioPlayer;
}
@property (nonatomic, retain) NSDate * dateCreated;
@property (nonatomic, retain) NSData * audioData;
@property (nonatomic, retain) NSString * name;
-(void) URplay;
@end
実装は次のとおりです。
// UserRecording.m
#import "UserRecording.h"
@implementation UserRecording
@dynamic dateCreated;
@dynamic audioData;
@dynamic name;
-(void) URplay {
NSError *error;
audioPlayer = [[AVAudioPlayer alloc] initWithData:self.audioData error:&error];
[audioPlayer play];
}
@end
(Stanford iTunes U のビデオで) カテゴリについて学んだとき、コードをカテゴリに移動しました。しかし、音は再生されなくなりました。唯一の違いは、宣言されたインスタンス変数 (IVAR) がなかったことです。確かに、古いコードでテストしました。上記のコードは音声を再生しますが、このコードは再生しません (シミュレーターで):
// UserRecording.h
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@interface UserRecording : NSManagedObject
@property (nonatomic, retain) NSDate * dateCreated;
@property (nonatomic, retain) NSData * audioData;
@property (nonatomic, retain) NSString * name;
-(void) URplay;
@end
そして実装:
// UserRecording.m
#import "UserRecording.h"
#import <AVFoundation/AVFoundation.h>
@implementation UserRecording
@dynamic dateCreated;
@dynamic audioData;
@dynamic name;
-(void) URplay {
NSError *error;
AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithData:self.audioData error:&error];
[audioPlayer play];
}
@end
ARCと関係あるのかな?しかし、関係なく、私は何ができますか?カテゴリでインスタンス変数を宣言することはできません。