Core data 如何在核心数据中存储和获取整数数组

Core data 如何在核心数据中存储和获取整数数组,core-data,Core Data,我已经编写了一个生成谜题的应用程序,我希望将其存储在核心数据中,或者存储在任何最合适的存储中。我还想搜索以前存储的拼图,以确定生成的拼图是否重复 每个拼图都由一个50到100位数的数组表示,我希望能够存储几千个 看起来最简单的解决方案是将数组转换为字符串,因为我已经知道如何使用字符串发出核心数据获取请求。我知道也可以在核心数据中存储二进制数据,但似乎不能基于这些数据获取实体 我是否缺少更适合这种任务的选项 谢谢你的帮助 如果在core data中使用可转换数据类型,则可以在core data中存

我已经编写了一个生成谜题的应用程序,我希望将其存储在核心数据中,或者存储在任何最合适的存储中。我还想搜索以前存储的拼图,以确定生成的拼图是否重复

每个拼图都由一个50到100位数的数组表示,我希望能够存储几千个

看起来最简单的解决方案是将数组转换为字符串,因为我已经知道如何使用字符串发出核心数据获取请求。我知道也可以在核心数据中存储二进制数据,但似乎不能基于这些数据获取实体

我是否缺少更适合这种任务的选项


谢谢你的帮助

如果在core data中使用可转换数据类型,则可以在core data中存储NSArray

您可以将这些添加到NSManagedObject子类中

+ (Class)transformedValueClass
{
    return [NSArray class];
}

+ (BOOL)allowsReverseTransformation
{
    return YES;
}

- (id)transformedValue:(id)value
{
    return [NSKeyedArchiver archivedDataWithRootObject:value];
}

- (id)reverseTransformedValue:(id)value
{
    return [NSKeyedUnarchiver unarchiveObjectWithData:value];
}
这里有一个关于这个的教程

如果您决定保存每个拼图,核心数据能够获取不同的对象

否则,您需要在保存之前进行比较


祝你好运

你说你的拼图是以数字形式存储的,所以拼图的字符串表示法非常合适

核心数据关系是不允许重复的NSSet对象,因此如果核心数据关系为
拼图
,则无法添加重复的拼图。但是,核心数据基于
objectId
属性定义了副本,而不是实体的属性。因此,在puzzle的NSManagedObject子类中,您将覆盖
validateForInsert
validateForUpdate
方法。在下面的示例中,我假设拼图实体具有一个名为
stringRepresentation
的属性,该属性保存拼图字符串:

- (BOOL)validateForUpdate:(NSError **)error
{
    return [self valueIsUnique:self.stringRepresentaion
                   forKey:@"stringRepresentation"
                error:error];
}
- (BOOL)validateForInsert:(NSError **)error
{
    return [self valueIsUnique:self.stringRepresentaion
                forKey:@"stringRepresentation"
                 error:error];
}
- (BOOL)valueIsUnique:(NSString *)value
               forKey:(NSString *)key
                error:(NSError **)error
{
    NSString * entityName = [[self entity] name];
    NSManagedObjectContext *moc = self.managedObjectContext;
    NSEntityDescription *entityDescription = [NSEntityDescription
                                              entityForName:entityName
                                              inManagedObjectContext:moc];

    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:entityDescription];

    NSPredicate * filter = [NSPredicate predicateWithFormat:@"%K LIKE[c] %@", key, value];
    [request setPredicate:filter];


    NSArray *array = [moc executeFetchRequest:request error:error];
    if (array == nil)
    {
        NSLog(@"Error retrieving array of values %@", *error);
        array = [NSArray array];
    }

    if (array.count == 1)
    {
        return YES;
    }


    if (error != NULL)
    {
        NSString * propertyName = NSLocalizedString(key, nil);
        NSString * errorString = NSLocalizedString(@"%@ must be unique", nil);
        errorString = [NSString stringWithFormat:errorString, propertyName];

        NSDictionary *userInfoDict = @{ NSLocalizedDescriptionKey : errorString,
                                        NSValidationObjectErrorKey : self,
                                        NSValidationKeyErrorKey : key};

        *error = [[NSError alloc] initWithDomain:NSCocoaErrorDomain
                                            code:NSManagedObjectValidationError
                                        userInfo:userInfoDict];

    }
    return NO;
}

谢谢你的帮助!这应该很完美。很乐意帮忙。使使用核心数据变得更加有趣!