簡體   English   中英

如何將NSArray數據保存在coredata中?

[英]How to save NSArray data in coredata?

我想將數據從NSArray保存到coredata中。 我該如何實現?

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

在這里,我以以下形式獲取數據:

在此處輸入圖片說明

如何將這些數據保存在NSManageobject

這是我的嘗試:

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();
    }
}

但是用這種技術我得到了一個錯誤。 我該如何解決這個問題?

編輯:-

我收到此錯誤:

***由於未捕獲的異常'NSInvalidArgumentException'而終止應用程序,原因:'-[__ NSCFString objectForKey:]:無法識別的選擇器發送到實例0x7ff262520660'

您的代碼將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;
}

因此,您需要處理轉換。 您可能已經在處理它了,以存儲原始數組...

但是,這就是為什么會出現錯誤,代碼需要一個字典,但實際上卻得到一個字符串的原因

您是否有一個看起來像這樣的物體?

#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

創建了這樣的對象后(使用insertNewObjectForEntityForName),嘗試像這樣獲取它:

NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:self.managedObjectContext];
[request setEntity:entity];
NSArray *results = [self.managedObjectContext executeFetchRequest:request error:&error];

順便說一句,我建議您遵循命名約定並將其命名為Demo。 干杯

我建議您使用很棒的MagicalRecord庫,它可以節省很多時間,而且非常簡單,這里的教程MagicalRecord Tutorial

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM