这里是可可新手。我正在开发一个基于iPhone UITableViewController的小部件,该小部件可用于在启动过程中编辑对象集中的日期和文本属性。目前,我正试图使用@selector和NSInvocation来实现这一点,如下所示。
备注
:“targetObject”是控制器初始化时设置的对象。
- (IBAction)saveDate:(id)sender {
//The selector below would normally be passed in when the controller is initialized
[self setDoneSelector:@selector(setDate:)];
NSMethodSignature * sig = nil;
sig = [[targetObject class] instanceMethodSignatureForSelector:[self doneSelector]];
NSInvocation * myInvocation = nil;
myInvocation = [NSInvocation invocationWithMethodSignature:sig];
[myInvocation setTarget:targetObject];
[myInvocation setSelector:doneSelector];
NSDate * myDate = [datePicker date];
[myInvocation setArgument:&myDate atIndex:2];
NSString * result = nil;
[myInvocation retainArguments];
[myInvocation invoke];
}
交易。h
#import <CoreData/CoreData.h>
@interface Transaction : NSManagedObject
{
}
@property (nonatomic, retain) NSString * message;
@property (nonatomic, retain) NSDate * date;
@end
交易。米
#import "Transaction.h"
@implementation Transaction
@dynamic message;
@dynamic date;
@end
[targetObject setDate:[datePicker date]];
EXC_BAD_ACCESS
我想这与NSManagedObject中使用的@dynamic方法以及创建它们的时间有关,但我对这个过程了解不够,不知道如何或是否可以解决这个问题以使其正常工作。我曾尝试在Transaction对象中显式创建“setDate:(NSDate*)aDate”方法,该方法有效,但我想知道我是否应该这样做,以及它对NSManagedObject有何影响。