2
我有一個實體的基於被配置爲使用一個「myProperty的」 NSObjectController
對象從一個取指令請求創建,像這樣:自動創建新的實體時綁定屬性改變
@interface MyPropertyController : NSObjectController
@property (strong) NSString *propertyName;
@end
@implementation MyPropertyController
- (instancetype)initWithPropertyName:(NSString *)propName moc:(NSManagedObjectContext *)moc {
if (self = [super init]) {
self.propertyName = propName;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"propertyName == %@", argumentArray:@[propName]];
self.managedObjectContext = moc;
self.entityName = @"MyProperty";
self.fetchPredicate = predicate;
}
return self;
}
- (id)newObject {
MyProperty *prop = [super newObject];
prop.propertyName = self.propertyName;
return prop;
}
@end
在我結合UI
MyProperty.numberValue
一個滑塊,使用戶可以改變代爾的價值:只要MyProperty
實例當用戶拖動滑塊存在
MyPropertyController *controller = [[MyPropertyController alloc] initWithPropertyName:@"some user-specified name" moc:self.managedObjectContext];
NSSlider *slider = [[NSSlider alloc] init];
[slider bind:NSValueBinding toObject:controller withKeyPath:@"content.numberValue" options:@{ NSNullPlaceholderBindingOption : @0 }];
這所有的作品找到。但是,如果用戶拖動滑塊並且MyProperty
實例尚不存在,我想自動創建該屬性的實例。
這可能嗎?我已經能夠完成它的唯一方法是使用自定義NSValueTransformer
,它使用reverseTransformedValue
來手動創建並插入類的實例,但我不禁覺得應該有一個正確的方法來做這在NSObjectController
本身。
我也可以通過在NSObjectController子類本身中重寫setValue:forKeyPath:並且延遲創建屬性來解決它。但我覺得那裏一定要有一個「正確」的方式來做到這一點。 –