• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 核心数据。 NSPredicate 使用常量文字作为属性名称的问题

[复制链接]
菜鸟教程小白 发表于 2022-12-12 09:37:50 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有 NSManagedObject 的属性。假设它是一个属性:

@property (retain, nonatomic) NSString *city;

为了从核心数据中获取数据,我总是使用 NSPredicate。谓词如下所示:

NSPredicate *predicate = [NSPredicate predicateWithFormat"%K == %@", @"city", @"San Francisco"];

但是这里的问题是项目使用键“城市”作为未定义的键,含义就像一个常量。因此,假设我在我的应用程序中使用键“城市”1000 次,那么如果 NSManagedObject 的属性发生更改,我需要用新的键替换所有这些键,例如到城市名。在这种情况下,我需要使用谓词:

NSPredicate *predicate = [NSPredicate predicateWithFormat"%K == %@", @"cityName", @"San Francisco"];

不舒服。所以现在我正在使用全局 extern NSString key kCity = @"city"; 但是如果数据模型也发生了变化,就会出现问题,因为如果属性将被更改,我只会崩溃运行应用程序和控制台时会说我:

'key path city not found in entity <NSSQLEntity...

这里有哪些解决方法?我想使用类似的东西

NSString * const kCity = myEntity.city.propertyString;

因此,如果属性被更改,解析器会告诉我项目有错误,我无法运行 app.因此,在我将属性更改为常量之后,我才能运行应用程序

如何获取 NSString 中的属性名称。当然这只是建议,也许有人有其他变种。

谢谢



Best Answer-推荐答案


您可以使用 mogenerator ,它所做的一件事是为您可以使用的属性和关系键创建一个 struct

// .h
extern const struct MBListAttributes {
    __unsafe_unretained NSString *title;
} MBListAttributes;

// .m
const struct MBListAttributes MBListAttributes = {
    .title = @"title",
};

然后您可以使用 MBListAttributes.title 来获取正确的 key 。

关于ios - 核心数据。 NSPredicate 使用常量文字作为属性名称的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23473897/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap