Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 添加到核心数据时如何避免重复?_Ios_Iphone_Core Data - Fatal编程技术网

Ios 添加到核心数据时如何避免重复?

Ios 添加到核心数据时如何避免重复?,ios,iphone,core-data,Ios,Iphone,Core Data,我正在试图找出如何避免添加重复数据?我希望通过使用具有唯一行的列来实现这一点,如果该列不是唯一的,则不允许添加整行。目前我添加的行如下所示 if([userProfileId isEqualToString: myId]) { User *users = [NSEntityDescription insertNewObjectForEntityForName:@"User" inManagedObjectContext: _managedObjectCo

我正在试图找出如何避免添加重复数据?我希望通过使用具有唯一行的列来实现这一点,如果该列不是唯一的,则不允许添加整行。目前我添加的行如下所示

if([userProfileId isEqualToString: myId]) {
                     User *users = [NSEntityDescription insertNewObjectForEntityForName:@"User" inManagedObjectContext: _managedObjectContext];
                     int i = 0;

                     for(i = 0; i < responseCount; i++) {
                         [users setUserId:userIds[i]];
                         [users setName:names[i]];
                         [users setDateRetrieved:[NSDate date]];

                     }

                     //TODO HAVE TO AVOID DUPLICATE FROM BEING SAVED IN DB
                     NSError *error = nil;
                     if(![_managedObjectContext save:&error]) {
                         //handle error if it does not save
                     }
                     [self getDbData];
if([userProfileId isEqualToString:myId]){
User*users=[NSEntityDescription insertNewObjectForEntityForName:@“User”在managedObjectContext:_managedObjectContext];
int i=0;
对于(i=0;i
您可以设置反映您独特内容的NSPredicate,并运行快速查询以查看该内容是否已存在:

将结果类型设置为NSManagedObjectdResultType以加快速度:

fetchRequest.resultType = NSManagedObjectIDResultType;
然后获取计数:

NSUInteger count = [self.managedObjectContext countForFetchRequest:fetchRequest error:&error];
然后检查:

if (count > 0){

// The unique content already exists - do nothing 

}

if (count == 0){

// Save the unique content
}

希望这能有所帮助。

如果我计划使用常规Sqlite进行缓存,那么使用常规Sqlite是否比使用核心数据更好?好吧,通常情况下,这取决于情况。我会坚持使用核心数据,作为一个框架做很多繁重的工作-要求ManagedObjects只需一毫秒。将获取限制设置为1会更快。如果你经常使用用BOOL值标记200万行(比如hassensomething=YES),那么直接sqlite更可取。