ios - 多对多核心数据我的例子
<p><p>我对 Core Data 中的多对多关系非常陌生,为了学习它,我创建了一个多对多关系示例,如下图所示。 </p>
<p>下面的代码显示了如何填充和检索数据。如果有人能告诉我这是否是实现多对多关系的正确方法,我将非常感激。</p>
<p> <img src="/image/CI6HU.png" alt="enter image description here"/> </p>
<pre><code>// First Course object
Course *first = (Course *) [NSEntityDescription
insertNewObjectForEntityForName:@"Course"
inManagedObjectContext:];
first.title = @"Core Data for iOS and OS X";
first.releaseDate = ;
// Second Course object
Course *second = (Course *) [NSEntityDescription
insertNewObjectForEntityForName:@"Course"
inManagedObjectContext:];
second.title = @"C/C++ Essential Training";
second.releaseDate = ;
// Third Course object
Course *third = (Course *) [NSEntityDescription
insertNewObjectForEntityForName:@"Course"
inManagedObjectContext:];
third.title = @"Java Essential Training";
third.releaseDate = ;
// Fourth Course object
Course *fourth = (Course *) [NSEntityDescription
insertNewObjectForEntityForName:@"Course"
inManagedObjectContext:];
fourth.title = @"iOS SDK: Building Apps with MapKit and Core Location";
fourth.releaseDate = ;
// Fifth Course object
Course *fifth = (Course *) [NSEntityDescription
insertNewObjectForEntityForName:@"Course"
inManagedObjectContext:];
fifth.title = @"Cocoa Essential Training";
fifth.releaseDate = ;
// First Lecturer object
Lecturer *author = (Lecturer *) [NSEntityDescription
insertNewObjectForEntityForName:@"Lecturer"
inManagedObjectContext:];
author.name = @"Smith";
;
;
;
// Second Lecturer object
Lecturer *author2 = (Lecturer *) [NSEntityDescription
insertNewObjectForEntityForName:@"Lecturer"
inManagedObjectContext:];
author2.name = @"John";
;
;
;
;
</code></pre>
<p>这就是我获取特定讲师教授的所有类(class)的方式。</p>
<pre><code>NSPredicate *predicate = ;
;
NSError *error = nil;
NSArray *fetchedObjects = [ executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects == nil)
{
NSLog(@"Problem! %@",error);
}
NSLog(@"fetch object count %d", );
for (Course *c in fetchedObjects)
{
NSLog(@" %@", c.title);
}
</code></pre>
<p>提前致谢。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>您的代码看起来正确,但谓词</p>
<pre><code>
</code></pre>
<p> 太复杂了。您在这里不需要 SUBQUERY。获取所有类(class)
与具有给定名称的讲师相关的,您可以使用</p>
<pre><code>
</code></pre>
<p>或更好</p>
<pre><code>
</code></pre>
<p>因为即使名称包含任何特殊字符,这也有效
比如引号。</p>
<hr/>
<p>如果您需要中间表,请回答您的问题:</p>
<ul>
<li>你的模型是有效的,如果它适合你,你应该使用它(实际上 Core Data 在内部创建了一个中间 SQLite 表)。</li>
<li><p>使用中间表的一个原因</p>
<pre><code> Course <-->>CourseLecturer<<-> Lecturer
</code></pre>
<p>是你可以通过给中间实体添加一个排序键来保持一个讲师的类(class)(以及一个类(class)的讲师)的指定顺序。</p></li>
<li>中间实体的另一个原因是它使之成为可能
显示一个包含所有类(class)和讲师的表格,其中一个部分用于
每门类(class)。</li>
</ul></p>
<p style="font-size: 20px;">关于ios - 多对多核心数据我的例子,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/28122785/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/28122785/
</a>
</p>
页:
[1]