forwardingTargetForSelector的机制:使用Core Data类

时间:2014-03-27 00:09:27

标签: inheritance ios7 selector

我很感激你对此的指导。我有一个简单的核心数据结构:

Datum <———————————————-- Model
=====                    =====
dataComment              lastUpdate
                         name
                         ...

也就是说,Model继承自Datum。生成的代码:

@interface Datum : NSManagedObject
@property (nonatomic, retain) NSString * dataComment;
@end

@interface Model : Datum
@property (nonatomic, retain) NSDate * lastUpdate;
@property (nonatomic, retain) NSString * name;

我使用以下代码检索数据对象:

SEL selectorForData = NSSelectorFromString(lclInst.fieldName);
id lclObjectForData = [self.theObjectToEdit performSelector:selectorForData]; 

其中lclInst.fieldName是&#34; name&#34;,&#34; lastUpdate&#34;或&#34; dataComment&#34;。 &#34;名称&#34;和&#34; lastUpdate&#34;正确解决,但&#34; dataComment&#34;没有(即使模型继承自Datum)。为了解决这个问题,我尝试尽可能接近Model类来解决问题。代码就在上面的代码示例之后:

if (!lclObjectForData)
{
    id lclStuff = [(Model*)(self.theObjectToEdit) resolveLostSelector:selectorForData ];
}

这是resolveLostSelector的代码:

-(id) resolveLostSelector: (SEL) aSelector
{
    id lclSel = [super forwardingTargetForSelector:aSelector];
    NSLog(@"resolution of SEL: %@", [[lclSel class] description]);
    return lclSel;
}

无法解决任何问题。

问题:
(1)我不能轻易地将代码放在Model类中,因为它是由Core Data生成的,所以我将它放入Model + ModelExt类中。所述类知道所有关于&#34; dataComment&#34;,如果我将代码直接放在方法中,它可以解决它。如果这不是获取Model的正确方法,那是什么?

(2)我不知道如何到达父母&#34;部分(在本例中为基准)来自&#34;孩子的对象&#34; part(模型,在这种情况下)。我使用&#34; super&#34;,但这可能不正确。通常,我只是说self.name和self.dataComment而不考虑它们之间的假设边界,在解析选择器时边界似乎是真实的。

(3)我是否应该采用这种方法并放入&#34; dataComment&#34;进入从Datum继承的每个类?

再次,非常感谢您的指导。此外,如果有声望的人附加了标签&#34; forwardingTargetForSelector&#34;对此。

0 个答案:

没有答案