菜鸟教程小白 发表于 2022-12-12 09:37:50

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


                                            <p><p>我有 <code>NSManagedObject</code> 的属性。假设它是一个属性:</p>

<pre><code>@property (retain, nonatomic) NSString *city;
</code></pre>

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

<pre><code>NSPredicate *predicate = ;
</code></pre>

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

<pre><code>NSPredicate *predicate = ;
</code></pre>

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

<pre><code>&#39;key path city not found in entity &lt;NSSQLEntity...
</code></pre>

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

<pre><code>NSString * const kCity = myEntity.city.propertyString;
</code></pre>

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

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

<p>谢谢</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您可以使用 <a href="https://github.com/rentzsch/mogenerator" rel="noreferrer noopener nofollow">mogenerator</a> ,它所做的一件事是为您可以使用的属性和关系键创建一个 <code>struct</code>。 </p>

<pre><code>// .h
extern const struct MBListAttributes {
    __unsafe_unretained NSString *title;
} MBListAttributes;

// .m
const struct MBListAttributes MBListAttributes = {
    .title = @&#34;title&#34;,
};
</code></pre>

<p>然后您可以使用 <code>MBListAttributes.title</code> 来获取正确的 key 。 </p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 核心数据。 NSPredicate 使用常量文字作为属性名称的问题,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/23473897/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/23473897/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 核心数据。 NSPredicate 使用常量文字作为属性名称的问题