2014-03-07 10 views
0

URL에서 JSON을 가져오고 Core DataMagical Record을 사용하여 장치에 저장하는 응용 프로그램을 작성 중입니다. 데이터베이스를 만들지 만 관계가 데이터베이스에 null을 표시합니다. 나는 그것이 흐름을 얻기 위해 노력하고 있어요 방법은 다음과 같습니다코어 데이터가 올바르게 저장되지 않음

  1. 사용자는 연결
  2. 연결이 카테고리
  3. 범주 기본 주제의 제목에 호출해야 기사가있다.

다음은 내 데이터 모델입니다. 모든 부분에서 문제가없는 것 같습니다.

Data Model

이 내가 데이터를 분석하고

[_operationManager POST:@"feeds" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { 

     id connections = [[operation.responseObject objectForKey:@"Data"]objectForKey:@"connections"]; 

     username.sessionKey =[[operation.responseObject objectForKey:@"Data"]objectForKey:@"sessionId"]; 

     id connection; 
     for(connection in connections){ 

      //Get the JSON values 
      NSString *contentSystemID = [connection objectForKey:@"contentSystemId"]; 
      NSString *contentSystemName = [connection objectForKey:@"name"]; 
      NSString *logoUrl = [connection objectForKey:@"logo"]; 
      NSNumber *unreadCount = [connection objectForKey:@"unread_count"]; 


      NSLog(@"Content System ID = %@",contentSystemID); 
      NSLog(@"Content System Name = %@",contentSystemName); 
      NSLog(@"Logo URL = %@",logoUrl); 
      NSLog(@"Unread Count = %@",unreadCount); 


      FCConnection *connectionEntity = [FCConnection MR_createEntity]; 
      connectionEntity.contentSystemID = contentSystemID; 
      connectionEntity.contentSystemName = contentSystemName; 
      connectionEntity.logoUrl = logoUrl; 
      connectionEntity.unreadCount = unreadCount; 

      id categories = [connection objectForKey:@"categories"]; 
      for (id cat in categories) 
      { 
      NSString *title = [cat valueForKey:@"name"]; 
      NSString *unreadCount = [cat valueForKey:@"unread_count"]; 
      NSLog(@"title = %@",title); 
      NSLog(@"unread_count = %@",unreadCount); 

       id items = [cat objectForKey:@"items"]; 
      // NSLog(@"items = %@",items); 
       for (id item in items){ 
        // 
       // NSLog(@"items = %@",item); 
        NSNumber *isRead = [item valueForKey:@"unread"]; 
        NSString *title = [item valueForKey:@"title"]; 
        NSString *link = [item valueForKey:@"link"]; 
        NSString *systemID = [item valueForKey:@"itemId"]; 

        NSLog(@"isRead = %@",isRead); 
        NSLog(@"title = %@",title); 
        NSLog(@"link = %@",link); 
        NSLog(@"systemID = %@",systemID); 

        BaseTopic *baseEntity = [BaseTopic MR_createEntity]; 
        baseEntity.title = title; 

        Article *article = [Article MR_createEntity]; 
        article.link = link; 
        article.systemID = systemID; 
        article.isRead = isRead; 

       } 

      } 
     } 

      [MagicalRecord saveUsingCurrentThreadContextWithBlock:nil completion:^(BOOL success, NSError *error) { 
       NSLog(@"Data Stored"); 

}]; 
     } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 

     //Failure 
     NSLog(@"Failed to fetch!"); 

             } ]; 
     } 

나는이 부분에 뭔가가 아래처럼 내 Core Data 파일을 일으키는 것을 알고 엔티티에 저장하고 방법이다. 보시다시피 데이터는 분리되어 있고 여러 행이 있습니다. 타이틀이 상위 엔티티 "BasicTopic"에 있기 때문에 추측하겠습니다.이 문제는 현재 발생하고 있습니다.

Duplication and seperation issue

나의 다음 문제는 관계가 테이블에 채우는하지 않는 것입니다. 아래는 사용자와 관계가있는 FCConnection의 행입니다. 행이 사용자의 pk로 채워지지 않은 이상한 이유가 있습니다.

도움이나 제안을 주시면 감사하겠습니다. 당신이 실제로 데이터 가져 오기 코드에서 객체 연결을하고 어디 보이지 않아요

Relationships issue

답변

0

확인해야합니다. 이러한 엔티티에 대한 관리 객체 하위 클래스를 생성하면 각 관계에 대해 몇 가지 메소드를 볼 수 있습니다. 엔티티 레코드를 매핑 할 때이를 사용해야합니다.

id connection; 
for(connection in connections) 
{ 
    //Get the JSON values 
    NSString *contentSystemID = [connection objectForKey:@"contentSystemId"]; 
    NSString *contentSystemName = [connection objectForKey:@"name"]; 
    NSString *logoUrl = [connection objectForKey:@"logo"]; 
    NSNumber *unreadCount = [connection objectForKey:@"unread_count"]; 

    FCConnection *connectionEntity = [FCConnection MR_createEntity]; 
    connectionEntity.contentSystemID = contentSystemID; 
    connectionEntity.contentSystemName = contentSystemName; 
    connectionEntity.logoUrl = logoUrl; 
    connectionEntity.unreadCount = unreadCount; 

    id categories = [connection objectForKey:@"categories"]; 

    NSMutableArray *categoryArray = [NSMutableArray array]; 

    for (id cat in categories) 
    { 
     NSString *title = [cat valueForKey:@"name"]; 
     NSString *unreadCount = [cat valueForKey:@"unread_count"]; 

     id items = [cat objectForKey:@"items"]; 

     BaseTopic *baseEntity = [BaseTopic MR_createEntity]; 
     baseEntity.title = title; 

FCCatgory *category = [FCCatgory MR_createEntity]; 

     NSMutableArray *itemArray = [NSMutableArray array]; 

     for (id item in items) 
     { 
      NSNumber *isRead = [item valueForKey:@"unread"]; 
      NSString *title = [item valueForKey:@"title"]; 
      NSString *link = [item valueForKey:@"link"]; 
      NSString *systemID = [item valueForKey:@"itemId"]; 

      Article *article = [Article MR_createEntity]; 
      article.link = link; 
      article.systemID = systemID; 
      article.isRead = isRead; 

      article.category = category; 

      [itemArray addObject:article]; 
     } 

     [category addArticles:[NSSet setWithArray:itemArray]]; // mapping the items to category 
     category.connection = connectionEntity; 
     [categoryArray addObject:category]; 
    } 

    [connectionEntity addCategories:[NSSet setWithArray:categoryArray]]; // mapping the items to connection entity 
} 

희망이 당신이

+0

네, 내가 지금 데 것이 두 번째 이미지와 함께 유일한 문제를 도움이 도움이 될 것입니다. 그것은 여전히 ​​데이터를 별도의 줄에 넣고 있습니다. Article에서 baseTopic의 제목에 액세스하려면 어떻게해야합니까? – Dwill

+0

위의 작업을 수행하기 위해 조건자를 작성해야합니까? – Dwill

+0

알았어, 알아 냈어. [setValue : title forKey : @ "title"]; article.title = title과의 차이점은 무엇입니까? – Dwill

0

. 각 루프의 끝에서

[user addConnectionObject:connection] 

같은 것을해야하고, 모든 관계는 각 관계에 엔티티 기록을 매핑해야

관련 문제