我已将json与JSONKit从url获取到initWithNibName中的NSDictionary
NSData *jsonData = [NSData dataWithContentsOfURL:[NSURL URLWithString:jsonUrl]];
JSONDecoder *jsonKitDecoder = [JSONDecoder decoder];
jsonDic = [jsonKitDecoder parseJSONData:jsonData]; // NSDictionary *jsonDic
NSLog(@"Json Dictionary Fetched %@", jsonDic); // Display the Json fine :-)
NSLog(@"Dictionary Count %i", [jsonDic count]); // Display the Dic count fine :-)
array = [jsonDic objectForKey:@"courses"]; // NSArray *array
NSLog(@"Courses Found %@", array); // Display the array fine :-)
NSLog(@"Courses Count %i", [array count]);
这是Json
{ "name":"Name 1" , "courses": [
{ "title":"Course 1" , "desc":"This is course 1" },
{ "title":"Course 2" , "desc":"This is course 2" },
{ "title":"Course 3" , "desc":"This is course 3" } ]
}
我将一个tableview拖到了xib。将IBOutlet UITableview tblView设置为Interface Builder上的Connectionsview,以及tableview dataSource和委托给FilesOwner
手动将tableview事件添加为
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
int cnt = [array count]; // CRASHES HERE Remeber returning 1; still why ?
return 1;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}
int indx = [indexPath indexAtPosition:1];
/* THESE ARE ALL COMMENTED
NSString *key = [[jsonDic allKeys] objectAtIndex:indx];
NSString *value = [jsonDic objectForKey:key];
cell.textLabel.text = value;
/* / THESE ARE ALL COMMENTED
NSDictionary *eachItem = [array objectAtIndex:indx];
cell.textLabel.text = [eachItem objectForKey:@"title"];
// */
cell.textLabel.text = @"My Title"];
return cell;
}
有人请帮我解决这个问题。我需要在tableview上显示课程。
答案 0 :(得分:0)
如果您向其发送消息(此处为count),则可能会释放您的数组对象导致崩溃(EXEC_BAD_ACCESS?)。从行
array = [jsonDic objectForKey:@"courses"]; // NSArray *array
似乎它是自动释放的,你应该保留它。
编辑:
您可以通过以下方式保留它:
将其设置为保留属性
@property(nonatomic, retain) NSArray* array;
并使用访问者
self.array = [jsonDic objectForKey:@"courses"];
自动释放旧值并保留新值。或者明确地保留它
array = [[jsonDic objectForKey:@"courses"] retain];
然后你一定不要忘记在完成后释放它,否则你会泄漏内存。您应该阅读Advanced Memory Management Programming Guide,它会给您一个详尽的解释,了解基本技术至关重要。