gpt4 book ai didi

iphone - 为什么调试器不知道我的 Core Data 生成的托管对象类上的方法? (附代码)

转载 作者:可可西里 更新时间:2023-11-01 06:23:54 24 4
gpt4 key购买 nike

为什么调试器不知道我的 Core Data 生成的托管对象类上的方法? (附加代码)所以:

  • 我有一个名为 WEView 的 XCode 生成的托管核心数据对象类
  • 我注意到调试器似乎没有意识到它的方法?
  • 请参阅下面的控制台输出。最初的“po self.weView”似乎有效,但在引用任何对象实例变量时却无效?

控制台输出

(gdb) po self.weView
<WEView: 0x4f6a3f0> (entity: WEView; id: 0x4f68710 <x-coredata://CB3E1660-4BA8-4700-ADDB-A32CD44D56B6/WEView/p3> ; data: {
title = "Weekend Items";
weEndDayTime = "(...not nil..)";
weStartDayTime = "(...not nil..)";
})
(gdb) po self.weView.title
There is no member named title.
(gdb) po [self.weView title]
Target does not respond to this message selector.
(gdb)

header - 由 Xcode 生成

@interface WEView : NSManagedObject {
@private
}
@property (nonatomic, retain) NSString * title;
@property (nonatomic, retain) id weStartDayTime;
@property (nonatomic, retain) id weEndDayTime;

@end

最佳答案

那是因为确实没有名为 title 的 ivar,也没有 getter 或 setter 对。这也是您使用 @dynamic 而不是 @synthesize 的原因。当您访问例如。标题,这在现实中将是这样的:

[myObject valueForKey:@"title"];

同样,设置标题是这样的:

[myObject setValue:foo forKey:@"title"];

所以基本上 NSManagedObject 只是一个围绕数据库获取或从缓存访问的包装器,但您永远不会访问该对象的一些真实 ivar(您可以尝试运行时函数来确定 NSManagedObject 子类的 ivar)。

如果你仍然想使用[self.view title],你需要覆盖它。这是一个例子:

- (NSString *)title
{
NSString *value;
[self willAccessValueForKey:@"title"];
value = [self primitiveValueForKey:@"title"];
[self didAccessValueForKey:@"title"];

return value;
}

当然这不是原子 setter/getter ,它比正常方式慢,但是嘿,它有效。

关于iphone - 为什么调试器不知道我的 Core Data 生成的托管对象类上的方法? (附代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5601081/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com