2012-01-05 11 views
1

コアデータを使用して配列に格納された複数の文字列オブジェクトを保存する方法を知りたいと思います。コアデータ - 配列の挿入方法

私は単一の文字列を保存する方法を理解していますが、便利なメソッドはありますか?配列全体を繰り返し処理するのではなく、各文字列アイテムを別々に格納するのではなく、

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

基本的に、私はsetValueをAliceではなく配列にできますか?

答えて

0

見て、この記事で任意の助け

おかげで(私は画像など、iPhone上でデータをキャッシュすることができますどのように関係のない質問...として):insert NSDictionary into CoreDataはちょうどで単語NSDictionaryを置き換えますNSArrayそれ以外は同じ質問です。

0

事前に作成されたメソッドがあるかどうかわかりません。あなたは、例えば、別の容器にキーを追跡する、または、次の例のようにどこかの定数として、それらを定義する必要があると思います:

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]; 

の追加があります。エンティティタイプStudentNSManagedObjectcategory methodなどの変更を行うことができます。次に、Student管理オブジェクトを使用する場所でこの関数を呼び出すことができます。あなたはデータ==========を取得し、あなたの配列

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

でこのメソッドを呼び出し、これまで

0

-(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; 
} 
関連する問題