Основные данные - Как вставить массив - PullRequest
1 голос
/ 05 января 2012

Я хотел бы знать, как сохранить несколько строковых объектов, все они хранятся в массиве, с использованием Core Data.

Я понимаю, как хранить одну строку, но есть ли какой-нибудь удобный метод / могу ли яхранить сам объект массива вместо того, чтобы перебирать массив и отдельно хранить каждый строковый элемент?

NSManagedObject *alice = [NSEntityDescription insertNewObjectForEntityForName:@"Student" inManagedObjectContext:context];
[alice setValue:@"Alice" forKey:@"name"];
[alice setValue:@"Computer Science" forKey:@"major"];

В принципе, можно ли в качестве setValue быть массивом вместо Алисы?вопрос, как я могу кешировать данные на iphone, такие как изображение ...)

Спасибо за любую помощь

Ответы [ 3 ]

0 голосов
/ 05 января 2012

Я не знаю, есть ли какие-либо готовые методы. Например, вам придется отслеживать ключи в отдельном контейнере или определять их как константы где-то, например, в следующем примере:

static NSUInteger const kMyNameIdx = 0U;
static NSUInteger const kMyMajorIdx = 1U;
static NSString * const kMyNameKey = @"name";
static NSString * const kMyMajorKey = @"major";

/* this does no error checking on the mo or array */
/* being null. it would be better to return an    */
/* NSError from this function and check its value */
/* to handle error cases                          */

- (void) updateManagedObject:(NSManagedObject *)mo withOrderedArray:(NSArray *)array
{
    id obj;
    NSUInteger objIdx = 0U;

    /* this assumes that name and major objects in */
    /* your array are in the same order as set by  */
    /* the constants                               */

    for (obj in array) {
        switch (objIdx) { 
            case kMyNameIdx:
                [mo setValue:obj forKey:kMyNameKey];
                break;
            case kMyMajorIdx:
                [mo setValue:obj forKey:kMyMajorKey];
                break;
            default:
                break;
        }
        objIdx++;
    }
}

Чтобы использовать это:

NSManagedObject *alice = [NSEntityDescription insertNewObjectForEntityForName:@"Student" inManagedObjectContext:context];
NSArray *myArray = /* ... */
[self updateManagedObject:alice withOrderedArray:myArray];

Существуют дополнительные модификации, которые вы можете внести, например, сделать метод категории для NSManagedObject типа сущности Student. Затем вы можете вызывать эту функцию везде, где вы используете Student управляемые объекты.

0 голосов
/ 21 июня 2014

где бы вы ни вызывали этот метод с вашим массивом

-(void)viewDidLoad
{
  [self insertLoginData:YOUR ARRAY NAME];
}

- (BOOL)insertLoginData:(NSMutableArray *)loginInfoArray
{
    NSError *error=nil;
    NSManagedObjectContext *context = [self managedObjectContext];
    NSManagedObject *propertyInfo = [NSEntityDescription
                                     insertNewObjectForEntityForName:@"UserLogin" 
                                     inManagedObjectContext:context];
    for(int count=0;count<[loginInfoArray count];count++)
    {
        [propertyInfo setValue:[[loginInfoArray objectAtIndex:count]objectForKey:@"UserId"] forKey:@"userName"];
        [propertyInfo setValue:[[loginInfoArray objectAtIndex:count]objectForKey:@"Password"] forKey:@"password"];  
    }

    if (![__managedObjectContext save:&error]) {
        NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
        return NO;
    }
    else  
    {
        return YES; 
    }
}

Получить данные ==========

-(NSMutableArray *)fetchLoginData
{
    NSFetchRequest *fetchReq = [[NSFetchRequest alloc]init];

    [fetchReq setEntity:[NSEntityDescription entityForName:@"UserLogin" inManagedObjectContext:self.managedObjectContext]];
    NSMutableArray *resultArray = [[NSMutableArray alloc]initWithArray:[self.managedObjectContext executeFetchRequest:fetchReq error:nil]];
    NSMutableArray *array=[[NSMutableArray alloc]init];
    for(UserLogin *pnt in resultArray)
    {
        //[array addObject:pnt.userName];
        [array addObject:pnt];
    }
    return array;
}
0 голосов
/ 05 января 2012

Посмотрите на этот пост: вставьте NSDictionary в CoreData , просто замените слово NSDictionary на NSArray, за исключением того, что это тот же вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...