I guys, I am fighting with a problem since some days and wanted to get your assistance. I have an RSS file on a server which gets parsed normally. Basically it's about shows, concerts, gigs of a band. That's why I have created the Show-Class:
我们,有些日子我正在解决一个问题并希望得到你们的帮助。我在服务器上有一个RSS文件,可以正常解析。基本上它是关于乐队的表演,音乐会,演出。这就是我创建Show-Class的原因:
Show.h:
Show.h:
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface Show : NSObject {
NSString* gigName;
NSString* date;
NSString* place;
NSString* door;
NSString* time;
NSString* bands;
NSString* entry;
NSString* query;
NSString* flyer;
NSString* type;
}
- (id)init:(NSString*)gigName date:(NSString*)date place:(NSString*)place door:(NSString*)door time:(NSString*)time bands:(NSString*)bands
entry:(NSString*)entry query:(NSString*)query flyer:(NSString*)flyer type:(NSString*)type;
@property (nonatomic, retain) NSString* gigName;
@property (nonatomic, retain) NSString* date;
@property (nonatomic, retain) NSString* place;
@property (nonatomic, retain) NSString* door;
@property (nonatomic, retain) NSString* time;
@property (nonatomic, retain) NSString* bands;
@property (nonatomic, retain) NSString* entry;
@property (nonatomic, retain) NSString* query;
@property (nonatomic, retain) NSString* flyer;
@property (nonatomic, retain) NSString* type;
@end
and the Show.m:
和Show.m:
#import "Show.h"
@implementation Show
@synthesize gigName, date , place, door, time, bands, entry, query, flyer, type;
- (id)init:(NSString*)_gigName date:(NSString*)_date place:(NSString*)_place door:(NSString*)_door time:(NSString*)_time bands:(NSString*)_bands
entry:(NSString*)_entry query:(NSString*)_query flyer:(NSString*)_flyer type:(NSString*)_type {
//if (self = [super init]) {
self = [super init];
if(self) {
gigName = _gigName;
date = _date;
place = _place;
door = _door;
time = _time;
bands = _bands;
entry = _entry;
query = _query;
flyer = _flyer;
type = _type;
}
return self;
}
- (void)dealloc {
[super dealloc];
}
@end
In my TourViewController (which is a table view) i have created this:
在我的TourViewController(这是一个表视图)中我创建了这个:
- (void)viewDidLoad {
[super viewDidLoad];
//Initialize the array.
listOfItems = [[NSMutableArray alloc] init];
pastShowArray = [NSMutableArray arrayWithCapacity:[stories count]]; // needs to be mutable
futureShowArray = [NSMutableArray arrayWithCapacity:[stories count]]; // needs to be mutable
for(int i = 0; i < [stories count]; i++) {
// get fields from story parser object
gigName = [[stories objectAtIndex:i] objectForKey:@"gig"];
type = [[stories objectAtIndex:i] objectForKey:@"type"];
date = [[stories objectAtIndex:i] objectForKey:@"date"];
place = [[stories objectAtIndex:i] objectForKey:@"place"];
door = [[stories objectAtIndex:i] objectForKey:@"door"];
time = [[stories objectAtIndex:i] objectForKey:@"time"];
bands = [[stories objectAtIndex:i] objectForKey:@"bands"];
entry = [[stories objectAtIndex:i] objectForKey:@"entry"];
query = [[stories objectAtIndex:i] objectForKey:@"query"];
flyer = [[stories objectAtIndex:i] objectForKey:@"flyer"];
// remove unnecessary whitespaces
gigName = [gigName stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
type = [type stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
date = [date stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
place = [place stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
door = [door stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
time = [time stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
bands = [bands stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
entry = [entry stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
query = [query stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
flyer = [flyer stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSLog(gigName);
NSLog(type);
Show* show = [[Show alloc] init:gigName date:date place:place door:door time:time bands:bands entry:entry query:query flyer:flyer type:type];
if([type isEqualToString:@"past"]) {
// fill past show array
NSLog(@"adding past object now");
[pastShowArray addObject:show];
} else {
// fill future show array
NSLog(@"adding future object now");
[futureShowArray addObject:show];
}
}
NSMutableDictionary *pastShowsArrayDict = [NSMutableDictionary dictionaryWithObject:pastShowArray forKey:@"Show"];
NSLog(@"added past show array to pastshowarraydict");
NSMutableDictionary *futureShowsArrayDict = [NSMutableDictionary dictionaryWithObject:futureShowArray forKey:@"Show"];
NSLog(@"added future show array to futureshowarraydict");
[listOfItems addObject:pastShowsArrayDict];
[listOfItems addObject:futureShowsArrayDict];
//Set the title
self.navigationItem.title = @"Tour";
}
As far as I can tell, that worked all without problems. Now I want to show the "gigName" of the show in the table. For this I need to get the show object from the NSDictionary. I have this but it crashes:
据我所知,这一切都没有问题。现在我想在表格中显示节目的“gigName”。为此,我需要从NSDictionary获取show对象。我有这个,但它崩溃了:
- (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];
}
// Set up the cell...
NSLog(@"try to set up cell");
//First get the dictionary object
NSDictionary *dictionary = [listOfItems objectAtIndex:indexPath.section];
NSArray *array = [dictionary objectForKey:@"Show"];
Show *show = [array objectAtIndex:indexPath.row];
NSLog(show.gigName);
cell.text = show.gigName;
return cell;
}
Error Output:
错误输出:
2011-02-14 16:32:44.462 All in Vain [405:307] try to set up cell
terminate called after throwing an instance of 'NSException'
Program received signal: “SIGABRT”.
Can you guys tell me how I can get the show object and set the table text to show.gigName? Any help is appreaciated. Thank you,
你能告诉我如何获取show对象并将表格文本设置为show.gigName吗?任何帮助都是适用的。谢谢,
cheers, doonot
欢呼,doonot
2 个解决方案
#1
0
In your init:...
for the Show object you need to make it:
在你的init:...对于Show对象你需要做到:
self.gigName = _gigName;
self.date = _date;
self.place = _place;
self.door = _door;
self.time = _time;
self.bands = _bands;
self.entry = _entry;
self.query = _query;
self.flyer = _flyer;
self.type = _type;
so that each of them are retained (or do gigName = [_gigName retain];
but then you loose the release if it was not empty).
这样它们每个都被保留(或者做gigName = [_gigName retain];但是如果它不是空的话你就松开了它)。
You may also have the same problem in the view controller and the way the variables are being set there but without seeing more I can't be sure.
你可能在视图控制器和变量的设置方式也有同样的问题,但没有看到更多,我不能确定。
#2
0
Try to change this :
试着改变这个:
cell.text = show.gigName;
into :
进入:
cell.textLabel.text = show.gigName;
#1
0
In your init:...
for the Show object you need to make it:
在你的init:...对于Show对象你需要做到:
self.gigName = _gigName;
self.date = _date;
self.place = _place;
self.door = _door;
self.time = _time;
self.bands = _bands;
self.entry = _entry;
self.query = _query;
self.flyer = _flyer;
self.type = _type;
so that each of them are retained (or do gigName = [_gigName retain];
but then you loose the release if it was not empty).
这样它们每个都被保留(或者做gigName = [_gigName retain];但是如果它不是空的话你就松开了它)。
You may also have the same problem in the view controller and the way the variables are being set there but without seeing more I can't be sure.
你可能在视图控制器和变量的设置方式也有同样的问题,但没有看到更多,我不能确定。
#2
0
Try to change this :
试着改变这个:
cell.text = show.gigName;
into :
进入:
cell.textLabel.text = show.gigName;