菜鸟教程小白 发表于 2022-12-13 04:43:24

ios - 如何将唯一数据输入核心数据值?


                                            <p><p>我是 iOS 开发的新手。我只想在核心数据表中显示重复数据数组的单个值。我知道这个问题被问了很多次,我搜索它,但我没有得到解决方案。请帮助我。</p>

<p>我在一个 View 中创建一个包含一个 View 的应用程序我制作了一个 HMSegmentedControll,在 HMSegmentedControll 中我添加了 <code>10</code> 分段控件,每个分段控件包含我想要制作的 UITableView 当用户选择任何 UITableViewCell 然后它的数据也存储在核心数据中,它工作正常但总是添加相同的数据我想停止重复这个相同的数据数组。请给我解决方案</p>

<p>这是我的 UITableViewCell 选择方法的代码。</p>

<pre><code>-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSManagedObjectContext *context = ;
if (self.bookMark)
{
    ;
    ;
    ;
    ;
    ;
    ;
}
else
{
   newBookMark = ;
    ;
    ;
    ;
    ;
    ;
    ;
}
NSError *error = nil;
if (!)
{
    NSLog(@&#34;Can&#39;t Save! %@ %@&#34;, error, );
}
}
</code></pre>

<p>这里 <code>self.bookMark</code> 和 <code>newBookMark</code> 都是 <code>NSManagedObject</code>。</p>

<p>我将获取请求的代码设置为</p>

<pre><code>NSManagedObjectContext *managedObjectContext = ;
NSEntityDescription *entity = ;

NSFetchRequest *request = [ init];
;
;
;
NSError *error;
self.allreadArray = ;
</code></pre>

<p>我设置 Here Dictionary 来获取像 as 一样的数据</p>

<pre><code>NSDictionary *entityProperties = ;
]];
]];
]];
]];
]];
]];
</code></pre>

<p>在这里,我在 tableview 单元格中显示 Fetch Data </p>

<pre><code>-(CustumCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier=@&#34;Cell&#34;;
CustumCell *cell=;
if (cell == nil)
{
    NSArray *nib=[loadNibNamed:@&#34;CustumCell&#34; owner:self options:nil];
    cell = ;
}
;
];
cell.viewLabel.hidden=TRUE;
NSManagedObject *device = ;
NSString*image=;
if(])
{
    ] placeholderImage: options:SDWebImageProgressiveDownload completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL)
   {
         ;
         cell.spinner.hidesWhenStopped=YES;
   }];
}
cell.headLabel.text=;
cell.categoryLabel.text=;
cell.timeLabel.text=;
return cell;
}
</code></pre>

<p>那么总是获取@“imagelink”数据我想获取所有数据请给我解决方案
提前致谢。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您的问题可能存在很多地方。我会把它们都列出来,希望其中一个能有所帮助:</p>

<p><strong>首先</strong>,在您的 <code>cellForRowAtIndexPath</code> 方法中,您有:</p>

<pre><code>NSManagedObject *device = ;
</code></pre>

<p>因此,您使用 <code>section</code> 编号来确定您使用哪个 <code>device</code> 来填充单元格。对于该部分中的每个单元格,这将是相同的 <code>device</code>。这可能是故意的(您可能想要几个部分,每个部分都有一个单元格,而不是一个部分)。但您可能会改为使用 <code>row</code> 数字来确定要使用的 <code>device</code>,以便每一行都不同。如果是这样,请将上面的行替换为:</p>

<pre><code>NSManagedObject *device = ;
</code></pre>

<p><strong>其次</strong>,在 <code>didSelectRowAtIndexPath</code> 方法中,将属性值保存到 <code>self.bookMark</code>(如果存在)或新的创建 <code>Bookmark</code> 对象。但是你没有在任何地方设置 <code>self.bookMark</code> 。因此,每次选择一行时,都会创建一个新对象。如果您确实希望 <code>self.bookMark</code> 引用该新创建的书签对象,请添加:</p>

<pre><code>self.bookMark = newBookMark;
</code></pre>

<p>到 <code>didSelectRowAtIndexPath</code> 方法,在您创建 <code>newBookMark</code> 之后立即。因此,下次您选择一行时,<code>self.bookMark</code> 将存在,您会将新值保存到其中,而不是创建另一个(重复)对象。</p>

<p><strong>第三</strong>,您的 fetch 使用的是 <code>setReturnsDistinctResults</code>。使用它是不寻常的,尽管它可能是您需要的。但是,您是否只是为了克服数据库中存在重复对象的问题而使用该选项?举个例子,假设您有四个具有以下属性的对象:</p>

<pre><code>title    post_id    category    imageLink
Red      0001       Primary   pic1.jpg
Blue   0002       Primary   pic2.jpg
Green    0003       Secondary   pic1.jpg
Red      0004       Secondary   pic2.jpg
</code></pre>

<p>如果您使用 <code>setReturnsDistinctResults</code> 并将 <code>setPropertiesToFetch</code> 设置为 <code>imageLink</code>,则结果将仅包含两项:</p>

<pre><code>imageLink
pic1.jpg
pic2.jpg
</code></pre>

<p>如果 <code>setPropertiesToFetch</code> 设置为 <code>imageLink</code> 和 <code>category</code>,那么您的结果将包括四个项目:</p>

<pre><code>category    imageLink
Primary   pic1.jpg
Primary   pic2.jpg
Secondary   pic1.jpg
Secondary   pic2.jpg
</code></pre>

<p>如果你真的想知道每个属性的不同值,那么你必须多次运行 fetch,并且每次都更改 <code>propertiesToFetch</code>:</p>

<pre><code>NSFetchRequest *request = [ init];
;
;
;
NSError *error;
NSDictionary *entityProperties = ;
]];
self.postIdArray = ;
]];
self.titleArray = ;
etc, etc.
</code></pre>

<p>这将产生两个数组,postIdArray 有四个项目:</p>

<pre><code>post_id
0001
0002
0003
0004
</code></pre>

<p>和 titleArray 有三个项目:</p>

<pre><code>title
Red
Blue
Green
</code></pre>

<p>以下哪一项最能描述您希望在获取中获得的内容?</p>

<p>抱歉,回答太长了。让我知道这是否有帮助或不相关,我会相应地添加或修改答案。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何将唯一数据输入核心数据值?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/27855180/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/27855180/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何将唯一数据输入核心数据值?