你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS Core Data: 存儲自定義對象 Save Custom NSObject

iOS Core Data: 存儲自定義對象 Save Custom NSObject

編輯:IOS開發綜合

思路:將NSObject轉化為NSData,然後將NSData存入到Core Data中

Core Data實現

添加數據:

    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    NSManagedObjectContext *context = [appDelegate managedObjectContext];
    NSManagedObject *newContact;
    newContact = [NSEntityDescription insertNewObjectForEntityForName:@Contact inManagedObjectContext:context];
    
    Person *person = [[Person alloc] init];
    person.name = @Xiaoming;
    person.number = @1008610086;
    
    Birthday *birthday = [[Birthday alloc] init];
    birthday.year = @2000;
    birthday.month = @January;
    birthday.day = @1st;
    person.birthday = birthday;

    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:person];
    [newContact setValue:data forKey:@person];
    
    NSError *error;
    [context save:&error];
獲取數據:
    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    NSFetchRequest *request = [[NSFetchRequest alloc] init];

    NSManagedObjectContext *context = [appDelegate managedObjectContext];
    NSEntityDescription *entityDesc = [NSEntityDescription entityForName:@Contact inManagedObjectContext:context];
    [request setEntity:entityDesc];
    
    NSManagedObject *matches = nil;
    
    NSError *error;
    NSArray *objects = [context executeFetchRequest:request
                                              error:&error];
    
    if ([objects count] == 0)
    {
        NSLog(@No matches);
    }
    else
    {
        for (int i = 0; i < [objects count]; i++)
        {
            matches = objects[i];
            NSData *data = [matches valueForKey:@person];
            Person *person = [NSKeyedUnarchiver unarchiveObjectWithData:data];
            NSLog(@My name is %@. I was born on %@ %@, %@. My phone number is %@, person.name, person.birthday.month, person.birthday.day, person.birthday.year, person.number);
        }
    }
Model文件中設置person的類型設為Binary Data:

 

\

 

Person和Birthday這兩個自定的NSObject,都需要使用NSCoding,實現initWithCoder和encodeWithCoder兩個方法

Person

//
//  Person.h
//  CoreDataTest
//

#import 
#import Birthday.h

@interface Person : NSObject

@property (strong, nonatomic) NSString *name;
@property (strong, nonatomic) NSString *number;
@property (strong, nonatomic) Birthday *birthday;

- (id)init;

@end
//
//  Person.m
//  CoreDataTest
//

#import Person.h

@implementation Person

- (id)init{
    self.name  = nil;
    self.number  = nil;
    
    return self;
}

- (id)initWithCoder:(NSCoder *)decoder{
    if (self = [super init]){
        self.name  = [decoder decodeObjectForKey: @name];
        self.number  = [decoder decodeObjectForKey: @number];
        self.birthday = [decoder decodeObjectForKey: @birthday];
    }
    
    return self;
}

- (void)encodeWithCoder:(NSCoder *)encoder{
    [encoder encodeObject:self.name forKey:@name];
    [encoder encodeObject:self.number forKey:@number];
    [encoder encodeObject:self.birthday forKey:@birthday];
}

@end
Birthday
//
//  Birthday.h
//  CoreDataTest
//

#import 

@interface Birthday : NSObject

@property (strong, nonatomic) NSString *year;
@property (strong, nonatomic) NSString *month;
@property (strong, nonatomic) NSString *day;

- (id)init;

@end
//
//  Birthday.m
//  CoreDataTest
//

#import Birthday.h

@implementation Birthday

- (id)init{
    self.year  = nil;
    self.month  = nil;
    self.day  = nil;

    return self;
}

- (id)initWithCoder:(NSCoder *)decoder{
    if (self = [super init]){
        self.year  = [decoder decodeObjectForKey: @year];
        self.month  = [decoder decodeObjectForKey: @month];
        self.day = [decoder decodeObjectForKey: @day];
    }
    
    return self;
}

- (void)encodeWithCoder:(NSCoder *)encoder{
    [encoder encodeObject:self.year forKey:@year];
    [encoder encodeObject:self.month forKey:@month];
    [encoder encodeObject:self.day forKey:@day];
}

@end

 

 
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved