在了解类别之前,我在生成的 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
当我了解类别时(通过斯坦福 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有关?但无论如何,我能做什么?您不能在类别中声明实例变量,这样就不行了。