2009-05-31 6 views
0

내가 뭘 잘못 했습니까? 방금 Navigation 기반 애플리케이션 코드를 수정하여 JSON 문자열을 읽고 표시했습니다. Objc_msgSend 메시지를 사용하여 목록을 위로 스크롤하면 문제가 발생합니다. cell.textLabel.text = [[위치 objectAtIndex : storyIndex] objectForKey : @ "title"];iPhone : 범위 밖의 행에 대해 cellforrow 요청

#import "RootViewController.h" 
#import "JSON.h" 


@implementation RootViewController 

@synthesize locations; 

- (NSString *)stringWithUrl:(NSURL *)url 
{ 
    // Construct a String around the Data from the response 
    return [[NSString alloc] initWithContentsOfURL:url]; 
} 

-(void)jsonLoad { 

    NSURL *URL = [NSURL URLWithString:@"http://bombaytokyo.com/whrru/jsonexample.html"]; 

    NSString *jsonstring = [self stringWithUrl:URL]; 
    NSLog(jsonstring); 
    locations = [jsonstring JSONValue]; 
    [jsonstring release]; 
} 


- (void)viewDidLoad { 
    [super viewDidLoad]; 

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller. 
    // self.navigationItem.rightBarButtonItem = self.editButtonItem; 
    [self jsonLoad]; 

} 


- (void)didReceiveMemoryWarning { 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
    [locations release]; 
} 

- (void)viewDidUnload { 
    // Release anything that can be recreated in viewDidLoad or on demand. 
    // e.g. self.myOutlet = nil; 
} 


#pragma mark Table view methods 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 1; 
} 


// Customize the number of rows in the table view. 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
// return 0; 
    return [locations count]; 
} 


// Customize the appearance of table view cells. 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    // Configure the cell. 
    int storyIndex = [indexPath indexAtPosition: [indexPath length] - 1]; 
    NSLog(@"Index Path: %i",indexPath); 
    //NSLog(title); 
    cell.textLabel.text=[[locations objectAtIndex: storyIndex] objectForKey: @"title"]; 

    return cell; 
} 

- (void)dealloc { 
    [super dealloc]; 
} 


@end 

답변

0

0 기반 배열에서 id 길이는 0이고 0 - 1 = -1로 설정하면 예외가 발생합니다.

[indexPath indexAtPosition: [indexPath length] - 1] 

변화

[indexPath indexAtPosition: [indexPath length]] 

에 당신은 당신이 indexPath.row을 싶지 않는 확신합니다. 매번 길이를 반환하는 것처럼 보입니다.

0

솔루션 :

self.locations = [jsonstring JSONValue];

모든 제안을 주셔서 감사합니다.

관련 문제