IPhone JSON в TableView - PullRequest
       9

IPhone JSON в TableView

0 голосов
/ 25 декабря 2011

У меня проблемы с моим кодом, он возвращает сообщение об ошибке ...

2011-12-24 22: 52: 36.280 BusinessManager [479: 20b] * Завершение приложенияиз-за необработанного исключения «NSInvalidArgumentException», причина: '* - [NSCFDictionary isEqualToString:]: нераспознанный селектор, отправленный экземпляру 0x3e965e0'>

Вот код:

 #import "BusinessManagerAppDelegate.h"
 #import "ProspectViewController.h"
 #import "JSON.h"

 @implementation ProspectViewController

 @synthesize jsonArray;

- (void)viewDidLoad {
NSURL *jsonURL = [NSURL URLWithString:@"https://www.mysite.php"];
NSString *jsonData = [[NSString alloc] initWithContentsOfURL:jsonURL];

NSLog(jsonData);
self.jsonArray = [jsonData JSONValue]; 

[jsonURL release];
[jsonData release];
}

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section      {
return [jsonArray count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {    
static NSString *Prospects = @"agencyname";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:Prospects];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:Prospects] autorelease];
}

cell.text = (NSString *)[self.jsonArray objectAtIndex:indexPath.row];
return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath   *)indexPath {

}

- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
}

- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated {
}

- (void)viewDidDisappear:(BOOL)animated {
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {   
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

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

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

@end

Я уверен, что у меня все настроено правильно, и JSON корректно возвращается в консоли.

Ответы [ 3 ]

2 голосов
/ 25 декабря 2011

cell.textLabel.text = (NSString *)[self.jsonArray objectAtIndex:indexPath.row];
(РЕДАКТИРОВАТЬ: обратите внимание, что исходный код обращался к cell.text вместо cell.textLabel.text)

Эта строка, скорее всего, является ошибкой.Давайте посмотрим на это шаг за шагом:
1. Вывод JSON - это массив, хранящийся в jsonArray (убедитесь, что это не словарь).
2. [self.jsonArray objectAtIndex:indexPath.row], скорее всего, NSDictionary.Как видно из возвращаемого исключения, оно включает в себя NCSFDictionary.Фактически, много раз, выходные данные JSON являются массивами словарей
3. С ошибкой 'NSInvalidArgumentException' причина: '* - [NSCFDictionary isEqualToString:]: нераспознанный селектор, отправленный экземпляру 0x3e965e0'> , код пытается сравнить NSDictionary с NSString.
4. Чтобы решить эту проблему, посмотрите на вывод JSON более внимательно и рассмотрите его!И убедитесь, что вывод JSON не меняется от случая к случаю (с разными URL).

0 голосов
/ 25 декабря 2011

Вы получите NSDictionary обратно из JSONValue.Это означает, что вам нужно выбрать словарь и выбрать каждое значение, которое вы хотите отобразить в вашей таблице.

NSDictionary *dictionary = [self.jsonArray objectAtIndex:indexPath.row]; cell.textLabel.text = [dictionary objectForKey:@"agencyname"];

0 голосов
/ 25 декабря 2011

Код, который вы разместили, не имеет никакого отношения к вашему сбою. Просто найдите все isEqualToString: в своем коде с помощью поискового навигатора XCode и разместите там точки останова. Когда вы найдете объект, который вызывает этот сбой, выясните, почему он становится NSDictionary вместо NSString (возможно, потому что вы присваиваете ему неправильное значение).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...