如何在核心数据中保存NSArray数据?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在核心数据中保存NSArray数据?相关的知识,希望对你有一定的参考价值。

我想将数据保存在qazxsw poi的核心数据中。我怎样才能做到这一点?

NSArray

在这里,我收到以下表格的数据:

NSArray *fetchdata = [Lockbox arrayForKey:@"fetch"];

如何在enter image description here中保存这些数据?

这是我的尝试:

NSManageobject

但是使用这种技术我收到了一个错误。我该如何解决这个问题?

编辑:-

我收到此错误:

***由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [__ NSCFString objectForKey:]:无法识别的选择器发送到实例0x7ff262520660'

答案

您的代码将NSFetchRequest *fetchrequestforside=[NSFetchRequest fetchRequestWithEntityName:@"demo"]; NSManagedObjectContext *context = [self managedObjectContext]; NSManagedObject *newDevice1 = [NSEntityDescription insertNewObjectForEntityForName:@"demo" inManagedObjectContext:context]; NSArray *fetchdata = [Lockbox arrayForKey:@"fetch"]; // for (int i =0;i<[fetchdata count];i++){ NSString *Name = [[fetchdata objectAtIndex:i] objectForKey:@"name"]; NSString *Websitename = [[fetchdata objectAtIndex:i] objectForKey:@"websitename"]; NSString *Feedlink = [[fetchdata objectAtIndex:i] objectForKey:@"feedurl"]; NSLog(@"value:%@,%@,%@",Name,Websitename,Feedlink); [newDevice1 setValue:Name forKey:@"name"]; [newDevice1 setValue:Websitename forKey:@"websitename"]; [newDevice1 setValue:Feedlink forKey:@"feedurl"]; NSLog(@"value:%@,%@,%@",Name,Websitename,Feedlink); // Save the context. NSError *error = nil; if (![context save:&error]) { NSLog(@"Unresolved error %@, %@", error, [error userInfo]); abort(); } } 数组的内容视为fetchdata的实例,但是,NSDictionary似乎只支持字符串内容:

LockBox

所以,你需要处理转换。你可能已经有一部分处理它已存储原始数组......

但是,这就是为什么你得到错误,代码需要一个字典,但实际上得到一个字符串

另一答案

你有一个看起来像这样的物体吗?

-(NSArray *)arrayForKey:(NSString *)key
{
    NSArray *array = nil;
    NSString *components = [self objectForKey:key];
    if (components)
        array = [NSArray arrayWithArray:[components componentsSeparatedByString:kDelimiter]];

    return array;
}

在创建这样的对象(使用insertNewObjectForEntityForName)之后尝试获取它:

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>

@interface demo : NSManagedObject

@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSString * websitename;
@property (nonatomic, retain) NSString * feedurl;

@end

顺便说一句,我建议你坚持命名约定并称之为Demo。干杯

另一答案

我建议你使用真棒库MagicalRecord它节省了很多时间,这里非常容易它的教程NSFetchRequest *request = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:self.managedObjectContext]; [request setEntity:entity]; NSArray *results = [self.managedObjectContext executeFetchRequest:request error:&error];

以上是关于如何在核心数据中保存NSArray数据?的主要内容,如果未能解决你的问题,请参考以下文章

保存到核心数据“ALL 或 ANY 运算符的左侧必须是 NSArray 或 NSSet

核心数据可转换属性(NSArray)为空

NSArray 到核心数据项

csv 转核心数据

iOS/Objective-C:在后台线程中保存到核心数据

将大量数据保存到核心数据会导致应用程序因内存问题而终止