2010-04-09 5 views
0

저는 재미있는 앱을 만들고 있는데 앱에 체크 아웃/바구니 시스템을 구현하는 방법을 알고 싶습니다.체크 아웃/바구니 시스템 구현 방법

기본적으로 제품 목록은 XML 파일의 형태로 웹 서버에서 가져온 다음 UITableView 컨트롤러에 표시됩니다. 셀을 탭하면 사용자가 제품에 대한보다 자세한 개요로 이동합니다.

앱이 제품을 바스켓 유형으로 가져올 수 있어야하고 이것이 내가 고생하는 곳입니다.

내가 볼 수있는 코드 샘플이 있습니까?

답변

0

데이터에 적합한 형식을 선택하면이 작업이 간단합니다. ObjC에서 가장 자연스러운 XML represantation은 NSDictionaries/NSArrays 트리입니다. 가장 단순한 경우에는 NSArray 항목이 있습니다 (테이블 뷰에 표시되는 항목). 각 항목은 "ItemName", "ItemPrice"등과 같은 키를 가진 NSDictionary입니다. 셀 인덱스가있는 배열의 항목에 액세스하는 것이 쉽습니다.

-(UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    NSDictionary * item = [allItems objectAtIndex:indexPath.row]; 
    NSString * cellTitle = [item objectForKey:@"ItemName"]; 
    ... 
} 

항목이 DetailViewController를 열고 선택한 항목에 대한 참조를 전달 cliked 경우 :

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath 
*)indexPath{ 
    MyDetailViewController * myDetailViewController = [[MyDetailViewController alloc] init]; 
    //MyDetailViewController should have a property of NSDictionary type, let it be "item" 
    myDetailViewController.item = [allItems objectAtIndex:indexPath.row]; 
    //pass also ref to basket 
    myDetailViewController.basket = basket; 
    [self.myDetailViewController pushViewController:dvController animated:YES]; 
    [myDetailViewController release]; 

} 

자세히 컨트롤러에있는 모든 항목 속성을 표시합니다.

바스켓은 NSMutableDictionary of NSMutableDictionaries입니다. 각 backet item 키는 "ItemName"과 같이 모든 항목에서 고유 한 일부 항목 속성입니다. 각 backet 항목 값은 원래 배열의 item에 대한 참조를 포함해야합니다. MyDetailViewController에서 당신은 같은 바구니에 항목을 추가 할 수 있습니다

-(void)addToBasket{ 
    NSDictionary * itemToAdd = [NSDictionary dictionaryWithObjectsAndKeys: 
     item, @"item", // this is reference to item from original array 
     [NSNumber numberWithInt:amount], @"amount", // or some other properties 
     nil];  
     [self.basket setObject:itemToAdd forKey:[item objectForKey:@"ItemName"]]; 
} 

열 때 DetailViewController 체크 바구니 이미 curent 항목이 포함 된 경우 :

if ([self.basket objectForKey:[item objectForKey:@"ItemName"]) 

만일 그렇다면

는 curent 항목이 이미 바구니에 추가 된 것을 보여 및 제공을 옵션을 제거하거나 금액을 변경하십시오.