2014-01-06 5 views
0

JSON 반환을 매일 여러 섹션으로 정렬하려고합니다. 여기에 내가 그것을이 나에게 섹션의 정확한 수를 줄 것이다JSON 반환을 UITableView 섹션 및 행으로 정렬

//...Connect to php script and get return json object 

int saleDay = 0; 

//Loop through json return 
for (int i = 0;i < [sales count]; i++) { 
    NSDictionary* dict = [sales objectAtIndex:i]; 

    Sale *eachSale =[[Sale alloc] initWithSaleId:[dict valueForKey:@"id"] 
              saleDay:[dict valueForKey:@"saleDay"] 
             saleMonth:[dict valueForKey:@"saleMonth"] 
             saleYear:[dict valueForKey:@"saleYear"] 
             saleTime:[dict valueForKey:@"saleTime"] 
             saleTotal:[dict valueForKey:@"total_price"] 
            saleDisDollars:[dict valueForKey:@"dis_dollars"] 
            saleDisPercent:[dict valueForKey:@"dis_percent"]]; 


    NSLog(@"sale Day %@",eachSale.saleDay); 
    [_salesList addObject:eachSale]; 

    int eachSaleDay = [eachSale.saleDay intValue]; 

    // if the next day is different from the one before it, add a new section. 
    if (saleDay != eachSaleDay) { 
     _saleDaysCount += 1; 
     NSLog(@"eachSaleDay %i" ,eachSaleDay); 
     NSLog(@"salesDayCount %i" ,_saleDaysCount); 
    } 

    saleDay = eachSaleDay; 
} 

이런 식으로한다면 내가 섹션의 수를 얻을 수 있습니다

sales =  (
       { 
      "dis_dollars" = 0; 
      "dis_percent" = 0; 
      id = 111; 
      saleDay = 5; 
      saleMonth = 1; 
      saleTime = "20:02:39"; 
      saleYear = 2014; 
      "total_price" = 25; 
     }, 
       { 
      "dis_dollars" = 0; 
      "dis_percent" = 0; 
      id = 103; 
      saleDay = 2; 
      saleMonth = 1; 
      saleTime = "19:13:41"; 
      saleYear = 2014; 
      "total_price" = 79; 
     }, 
       { 
      "dis_dollars" = "0.55"; 
      "dis_percent" = "0.10000000149012"; 
      id = 101; 
      saleDay = 2; 
      saleMonth = 1; 
      saleTime = "10:41:11"; 
      saleYear = 2014; 
      "total_price" = 22; 
     }, 

       { 
      "dis_dollars" = 0; 
      "dis_percent" = 0; 
      id = 108; 
      saleDay = 1; 
      saleMonth = 1; 
      saleTime = "11:00:00"; 
      saleYear = 2014; 
      "total_price" = 66; 
     } 
    ); 
} 

json으로 복귀,하지만 어떻게 객체 나 나 그룹을 하루에 따라 각 섹션에 대한 행 수를 찾고 각 행에 어떤 객체가 있어야합니까?

NSSort 설명자를 사용해야한다고 생각하지만 구현할 위치와 개별 일 배열에 액세스하는 방법을 잘 모르겠습니다.

제안 사항? 당신이 당신의 결과를 통해 반복하는 동안

감사

+0

NSArray 및 NSMutableArray에서 사용할 수있는 여러 가지 정렬 함수 중 하나를 사용합니다. 초보자에게'sortUsingFunction'은 이해하기 쉬울 것입니다. 왜냐하면 그것은 똑 바른 C 코드이기 때문입니다. –

답변

0

는 단순히 각 Sale의 전체 날짜 타입의 NSNumber의 추가 필드를 추가합니다. 섹션의

[_salesList sortUsingDescriptors: 
    @[[NSSortDescriptor sortDescriptorWithKey:@"saleDateIdentifier" ascending:NO]]]; 

NSArray *allDates = [_salesList valueForKeyPath:@"saleDateIdentifier"]; 
NSSet *uniqueDates = [NSSet setWithArray:allDates]; 
NSArray *sortedUniqueDates = [uniqueDates sortedArrayUsingDescriptors: 
    @[[NSSortDescriptor sortDescriptorWithKey:@"saleDateIdentifier" ascending:NO]]]; 

전화 번호가 sortedUniqueDates.count입니다 :

eachSale.saleDateIdentifier = @(eachSale.saleYear.intValue * 10000 + 
           eachSale.saleMonth.intValue * 100 + 
           eachSale.saleDay.intValue); 

은 이제 정렬하고 계산하기 쉽습니다. 각 섹션의 경우 saleDateIdentifier을 사용하여 날짜 문자열의 서식을 titleForRowAtIndexPath으로 지정할 수 있습니다.

BTW, 아마도 eachSale의 초기화 메소드에서 valueForKey을 사용하고 싶지 않을 수 있습니다. 어쩌면 당신은 실제로 objectForKey을 의미 할 것입니다. 심지어 Sale 클래스의 속성을 입력하고 NSNumberNSString을 적절하게 사용해야합니다.

+0

이 의미가 있습니다. 나는 그것을 시도 할 것이다. sortDescriptor는 어디에 구현합니까? 'numberOfSectionsInTableView : tableView' 메소드에 있을까요? 왜냐하면 데이터가 비동기 적으로로드 될 때 notif를 보내서 테이블을 다시로드하기 때문입니다. 이 오류는 계속 발생합니다. '이 클래스는 키 saleDateIdentifier 키에 맞게 코딩 된 키 값이 아닙니다.' – vinylDeveloper