2012-12-28 3 views
8

다음은 피드의 다른 페이지를 가져 와서 구문 분석하는 데 사용하는 함수입니다. 사용자가 스크롤의 tableview 하단으로, I 카운터를 증분으로는 두 번째 피드의 페이지에 액세스하기 위해 아래의 함수를 사용하면UITableView 이미 가져온 것을 유지하면서 행을 추가하십시오.

- (void)getFeed:(NSInteger) pageNumber 
{ 
    collectedData = [[NSMutableData alloc] init]; 
    NSString *urlStr =[NSString stringWithFormat:@"http://sitename.com/feed/?paged=%d", pageNumber]; 
    NSURL *url = [NSURL URLWithString:urlStr]; 
    NSURLRequest *req = [NSURLRequest requestWithURL:url]; 
    conn = [[NSURLConnection alloc] initWithRequest:req delegate:self startImmediately:YES]; 
} 

는 :

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
    float endScrolling = scrollView.contentOffset.y + scrollView.frame.size.height; 
    if (endScrolling >= scrollView.contentSize.height) 
    { 
     counter ++; 
     [self getFeed:counter]; 
    } 
} 

문제 때 대신이고 이미 가져온 항목 아래로로드하면 새 페이지 항목을 표시하기 위해 tableview가 다시로드되고 이전 페이지 항목은 사라집니다. 내가 무한 한 스크롤을 기존의 것들 아래에 새 페이지 항목을로드하고 싶습니다. 내가 어떻게 할 수 있니? 배열이 새로운 객체를 얻을 때마다

답변

2

자신의 질문에 답변하는 것이 좋지 않지만 다른 포럼의 도움을 받아 답변을 찾을 수있었습니다.

테이블 뷰 컨트롤러가 변경 가능한 배열과 동기화되지 않았으므로 다른 테이블을 만들고 두 배열을 추가합니다.

1 단계 : 나는 특성

@property (nonatomic, readonly) NSMutableArray *moreItems; 
생성

2 단계 : 호출 fetchEntries

moreItems = [[NSMutableArray alloc] init]; 

전에 viewDidLoad에있는 배열을 초기화 단계 3 : connectionDidFinishLoading, 난 이전 배열 새로운 배열 'moreItems'를 첨부 'items'

4 단계 : 데이터 소스를 n으로 변경했습니다.

return [[channel items] count]; 

에서 새로운 배열

return [moreItems count]; 

에 다음 cellForRowAtIndexPath에서 umberOfRowsInSection는

RSSItem *item = [moreItems objectAtIndex:[indexPath row]]; 
1

는이

-(void)insertRowInTableView 
{ 
    int row = [YourDataSourceArray count]; 
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:0]; 
    NSArray *indexPaths = [NSArray arrayWithObject:indexPath]; 
    [YourTableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationTop]; 
} 

여기 YourDataSourceArray이있는 당신이 당신의 tableview 행 수/데이터를 설정하는 배열입니다 전화를했다. YourTableView이 tableView 개체 이름입니다.

+0

내가 알고있는 새로운 배열을 사용하지만, 난 그냥 편집이 기능 – Jessica

+0

을 사용하는 방법을 모른다 내 대답 – spider1983

+0

lemme 시도이 – Jessica

0

이것은 웹 서비스에서 데이터를 가져올 때 테이블을 채우는 데 사용하는 배열에 데이터를 추가 할 때 새로운 데이터 만 가져올 수 있기 때문일 수 있습니다. 배열에 새로운 데이터를 추가합니다 (변경 가능한 배열 확인하고 추가 새로운 데이터를) 그냥 다음 줄

[your_Table reloadData]; 

이 당신을 도울 것입니다 희망을 사용합니다.

+0

나는 이미 그 일을하고 있지만 내 문제에 대한 해결책은 아닙니다. insertRowsAtIndexPaths를 사용해야하지만, – Jessica

+0

하는 방법을 모르면 새 데이터가 특정 행에 있어야합니다. – superGokuN

+0

이미 가져온 행의 끝에 – Jessica

1

insertRowsAtIndexPaths: withRowAnimation: 방법을 UITableView으로 사용해야합니다. 당신의주의를 기울여야한다

것은이 방법을 사용하면, tableView:numberOfRowsInSection에 의해 재곡 번호 행이 더 나은, 대신로드 아래로 스크롤을 사용하는 number_of_existing_rows + number_of_newly_inserted_rows

0

에 동일 "로있는 tableview의 마지막 행을 사용해야한다는 것입니다 추가 항목로드 "를 선택하고 사용자가 해당 행을 선택하면 새 피드를 가져 와서 tableview를 다시로드하십시오.

또한 getfeed 메서드를 사용할 때마다 코드에 의심의 여지가 있습니다.
collectedData를 생성하고 있습니다. 이 데이터를 테이블 데이터 소스 데이터에 추가하지 않아서 테이블 뷰의 최근 피드 데이터 만 표시 될 수 있습니다. 확인하십시오

+0

항목을 보유하는 NSMutableArray를 이미 사용하고 있습니다. 지금은 주 문제에 집중해야한다고 생각합니다. – Jessica

+0

아니요, masterdetail 템플릿의 기본 코드입니다. 상단에 행이 추가됩니다. – Jessica

+0

안녕하세요, 아래 코드를 확인하십시오. 먼저 데이터 소스에 데이터를 삽입하고 insertRowsAtIndexPaths : withRowAnimation이라는 호출을 작성해야합니다. –

1

다음 페이지의 새 피드를 가져 오면 배열의 개체를 가져옵니다. 이 배열의 개체를 데이터 소스 배열에 추가합니다. 다음과 같이 이제 테이블에 행을 삽입 :

"indexPathsToInsert는"당신의 테이블의 마지막 행에서 시작하여 새 개체에 대한 indexPaths을 containg NSIndexPath 객체의 배열 인
[yourTable beginUpdates]; 
[yourTable insertRowsAtIndexPaths:indexPathsToInsert 
       withRowAnimation:UITableViewRowAnimationBottom]; 
[yourTable endUpdates]; 

.

희망이 도움이됩니다. 시작 인덱스는 (데이터 소스에있는 개체의 수) 및 (수를) 추가 할 객체의 수입니다 함께

1

안녕,

은, 루프를 작성, insertRowsAtIndexpaths을 indexpaths의 배열을 생성하고 호출 withRowAnimation합니다.코드가 도움이되기를 바랍니다.

NSInteger statingIndex = [self.tableViewDatasource count]; 
    NSInteger noOfObjects = //Get the no.of objects count from getFeed method. 
    NSMutableArray *indexPaths = [[NSMutableArray alloc] init]; 

    for (NSInteger index = statingIndex; index < statingIndex+noOfObjects; index++) { 

     [_objects addObject:]; // add the object from getFeed method. 
     NSIndexPath *indexPath = [NSIndexPath indexPathForRow:index inSection:0]; 
     [indexPaths addObject:indexPath]; 
     [indexPath release]; 

    } 

    [self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade]; 
+0

너도 이것도 확인해. – Jessica

관련 문제