2015-01-18 3 views
0

AFNetworking을 사용하여 기존 Tweet에 NSMutableArray 트윗을 게시하려고합니다.문제 페이징 Twitter with AFNetworking

-[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object 
2015-01-18 00:17:29.869 Floadt[91615:3385865] STACK TRACE : 
(
    0 CoreFoundation      0x00000001055a1f35 __exceptionPreprocess + 165 
    1 libobjc.A.dylib      0x000000010523abb7 objc_exception_throw + 45 
    2 CoreFoundation      0x00000001055a1e6d +[NSException raise:format:] + 205 
    3 CoreFoundation      0x000000010559a6ea -[__NSCFArray insertObject:atIndex:] + 106 
    4 CoreFoundation      0x00000001054c6a43 -[NSMutableArray insertObjects:count:atIndex:] + 179 
    5 CoreFoundation      0x00000001054c6774 -[NSMutableArray insertObjectsFromArray:range:atIndex:] + 372 
    6 CoreFoundation      0x00000001054c6574 -[NSMutableArray addObjectsFromArray:] + 612 
    7 Floadt        0x0000000101e91f85 __57-[TwitterTableViewController fetchNextTwitterPageWithID:]_block_invoke_2 + 117 
    8 CoreFoundation      0x00000001055029c4 __NSArrayEnumerate + 596 
    9 Floadt        0x0000000101e91e56 __57-[TwitterTableViewController fetchNextTwitterPageWithID:]_block_invoke + 230 
    10 Floadt        0x0000000101e73223 __64-[AFJSONRequestOperation setCompletionBlockWithSuccess:failure:]_block_invoke91 + 51 
    11 libdispatch.dylib     0x00000001076fbba6 _dispatch_call_block_and_release + 12 
    12 libdispatch.dylib     0x00000001077197f4 _dispatch_client_callout + 8 
    13 libdispatch.dylib     0x00000001077028fb _dispatch_main_queue_callback_4CF + 949 
    14 CoreFoundation      0x0000000105509fe9 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9 
    15 CoreFoundation      0x00000001054cceeb __CFRunLoopRun + 2043 
    16 CoreFoundation      0x00000001054cc486 CFRunLoopRunSpecific + 470 
    17 GraphicsServices     0x0000000106f299f0 GSEventRunModal + 161 
    18 UIKit        0x0000000103f82420 UIApplicationMain + 1282 
    19 Floadt        0x0000000101ee5f73 main + 115 
    20 libdyld.dylib      0x000000010774e145 start + 1 
    21 ???         0x0000000000000001 0x0 + 1 

페이징 방법

-(void)fetchNextTwitterPageWithID:(NSString *)objectID { 
    self.twitterClient = [[AFOAuth1Client alloc] initWithBaseURL:[NSURL URLWithString:@"https://api.twitter.com/1.1/"] key:@"XXXXXXXXXXX" secret:@"XXXXXXXXXXXX"]; 

    NSDictionary *parameters = @{ 
           @"max_id" :objectID 
           }; 

    AFOAuth1Token *twitterToken = [AFOAuth1Token retrieveCredentialWithIdentifier:@"TwitterToken"]; 
    [self.twitterClient setAccessToken:twitterToken]; 
    [self.twitterClient registerHTTPOperationClass:[AFJSONRequestOperation class]]; 
    [self.twitterClient getPath:@"statuses/home_timeline.json" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { 
     NSMutableArray *responseArray = (NSMutableArray *)responseObject; 
     [responseArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
      [tweets addObjectsFromArray:responseObject]; 
      [self.tableView reloadData]; 
     }]; 
     [self.tableView reloadData]; 
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     NSLog(@"Error: %@", error); 
    }]; 
} 

페이지 내가 이해에 따르면

-(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if([indexPath row] == ((NSIndexPath*)[[tableView indexPathsForVisibleRows] lastObject]).row){ 
     NSDictionary *totalArray = tweets[indexPath.row]; 
     NSString *cellID = [totalArray objectForKey:@"id"]; 
     [self fetchNextTwitterPageWithID:cellID]; 
    } 
} 
+0

아마'NSMutableArray'에'responseObject'를 캐스트하면 안됩니다. 그것은 NSArray 가능성이 높습니다. 게다가'responseObject'를'responseArray'에 캐스팅하고 열거하고, 매 반복마다'tweets'에 추가하는 이유는 무엇입니까? 나는 이유를 여기서 알 수 없었다. – kcome

+0

@kcome 좋아, NSMutableArray에 responseArray를 캐스팅하지 말고 어떻게해야할까요? – Prad

+0

먼저 NSMutableArray를 NSArray로 변경할 수 있습니다. 그럼 내 질문이 온다 : "[Tweet addObjectsFromArray : responseObject];"의 이유는 무엇인가? " responseArray (정확히 "responseObject") 객체의 각 반복 내부. 이것은 더 이상의 설명이 없으면 의미가 없습니다. – kcome

답변

0

의 하단을 검출 그러나이 오류 내 응용 프로그램이 실행될 때마다받을 당신이 코드에서, 여기 정정에 대한 내 대답은 :

-(void)fetchNextTwitterPageWithID:(NSString *)objectID { 
    self.twitterClient = [[AFOAuth1Client alloc] initWithBaseURL:[NSURL URLWithString:@"https://api.twitter.com/1.1/"] key:@"XXXXXXXXXXX" secret:@"XXXXXXXXXXXX"]; 
    NSDictionary *parameters = @{ 
           @"max_id" :objectID 
           }; 
    AFOAuth1Token *twitterToken = [AFOAuth1Token retrieveCredentialWithIdentifier:@"TwitterToken"]; 
    [self.twitterClient setAccessToken:twitterToken]; 
    [self.twitterClient registerHTTPOperationClass:[AFJSONRequestOperation class]]; 
    [self.twitterClient getPath:@"statuses/home_timeline.json" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { 
     NSArray *responseArray = (NSArray *)responseObject; 
     [tweets addObjectsFromArray:responseArray]; 
     [self.tableView reloadData]; 
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     NSLog(@"Error: %@", error); 
    }]; 
} 
+0

이 코드를 사용한 후에도 여전히 정확한 오류가 발생합니다. – Prad