Почему мой список не заполняет мой UITableView? - PullRequest
2 голосов
/ 16 июля 2010

Я добился определенного прогресса и редактирую вопрос, чтобы он снова был актуальным. Моя большая проблема сейчас заключается в том, что загрузится сгруппированное табличное представление, но показывает все все в каждом разделе с каждой строкой. Кроме того, мой UIAlertView возвращает все ссылки на мой список (нулевой). Как бы это исправить, потому что ссылки на список убивают меня. Любая помощь будет принята с благодарностью!

Вот текстовая версия моего plist-файла:

<array>
<dict>
    <key>eventName</key>
    <string>Comedy Caravan</string>
    <key>eventSpecifics</key>
    <string>Nicholas Anthony</string>
    <key>eventLocation</key>
    <string>The Cats Den</string>
    <key>eventType</key>
    <string>Comedy</string>
    <key>eventGoodies</key>
    <string>Both</string>
    <key>eventDate</key>
    <date>2010-07-23T00:00:00Z</date>
</dict>
<dict>
    <key>eventName</key>
    <string>Comedy Caravan</string>
    <key>eventLocation</key>
    <string>The Cats Den</string>
    <key>eventType</key>
    <string>Comedy</string>
    <key>eventSpecifics</key>
    <string>Bruce Baum</string>
    <key>eventGoodies</key>
    <string>Prizes</string>
    <key>eventDate</key>
    <date>2010-07-24T00:00:00Z</date>
</dict>
<dict>
    <key>eventName</key>
    <string>Late Night Film Series</string>
    <key>eventLocation</key>
    <string>The Cats Den</string>
    <key>eventType</key>
    <string>Comedy</string>
    <key>eventSpecifics</key>
    <string>Avatar</string>
    <key>eventGoodies</key>
    <string>Food</string>
    <key>eventDate</key>
    <date>2010-07-24T02:00:00Z</date>
</dict>
</array>

Вот мой ThisWeekViewController.h:

#import <UIKit/UIKit.h>

@class Event;

@interface ThisWeekViewController : UITableViewController

{
NSArray *eventNames;
Event *event;
}

@property (nonatomic, retain) NSArray *eventNames;
@property (nonatomic, retain) Event *event;

@end

и вот мой ThisWeekViewController.m:

#import "ThisWeekViewController.h"
#import "Event.h"

@implementation ThisWeekViewController

@synthesize eventNames;
@synthesize event;


- (void)viewDidLoad {
    [super  viewDidLoad];

    NSString *path = [[NSBundle mainBundle] pathForResource:@"Events" ofType:@"plist"];
    NSArray *dict = [[NSArray alloc] initWithContentsOfFile:path];

    NSArray *namesArray = [dict valueForKey:@"eventName"];
    self.eventNames = namesArray;
    [dict release];

    [self.tableView reloadData];    
}



- (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.
}

- (void)viewDidUnload {
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    self.eventNames = nil;
}


#pragma mark Table View Methods

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return [self.eventNames count];
}


- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    NSString *key = [NSString stringWithFormat:@"%@", event.eventName];
    return key;
}


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


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

    NSUInteger row = [indexPath row];

    static NSString *CellIdentifier = @"Cell";

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

    // Configure the cell.

    // Set the cell's text to the event name
    cell.textLabel.text = event.eventName;

    return cell;
}


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

}


- (void)dealloc {
//  [thisWeek release];
    [event release];
    [eventNames release];
    [super dealloc];
}


@end

Я также включил свой файл Event.h

 #import <Foundation/Foundation.h>


@interface Event : NSObject {
    NSString *eventName;
    NSString *eventType;
    NSDate *eventDate;
    NSString *eventLocation;
    NSString *eventGoodies;
    NSString *eventSpecifics;

}

- (id)initWithDictionary:(NSDictionary *)aDictionary;

@property (nonatomic, retain) NSString *eventName;
@property (nonatomic, retain) NSString *eventType;
@property (nonatomic, retain) NSString *eventLocation;
@property (nonatomic, retain) NSDate *eventDate;
@property (nonatomic, retain) NSString *eventGoodies;
@property (nonatomic, retain) NSString *eventSpecifics;

@end

и мой файл Event.m

 #import "Event.h"


@implementation Event

@synthesize eventName;
@synthesize eventType;
@synthesize eventDate;
@synthesize eventLocation;
@synthesize eventGoodies;
@synthesize eventSpecifics;

- (id)initWithDictionary:(NSDictionary *)aDictionary {
    if ([self init]) {
        self.eventName = [aDictionary valueForKey:@"eventName"];
        self.eventType = [aDictionary valueForKey:@"eventType"];
        self.eventDate = [aDictionary valueForKey:@"eventDate"];
        self.eventLocation = [aDictionary valueForKey:@"eventLocation"];
        self.eventGoodies = [aDictionary valueForKey:@"eventGoodies"];
        self.eventSpecifics = [aDictionary valueForKey:@"eventSpecifics"];

    }
    return self;
}

- (void)dealloc {
    [eventName release];
    [eventType release];
    [eventDate release];
    [eventLocation release];
    [eventGoodies release];
    [eventSpecifics release];

    [super dealloc];
}

@end

Я хотел бы иметь возможность размещать такие вещи, как cell.detailTextLabel.text = event.eventSpecifics, и просто использовать ссылки, подобные этим.

1 Ответ

0 голосов
/ 16 июля 2010

Если я правильно помню, UITableViewController перезагружает табличное представление в -viewWillAppear:.Это вполне может быть вызвано до вызова -viewDidLoad.Я бы порекомендовал вам вставить вызов в [self.tableView reloadData] в конце вашей реализации -viewDidLoad.

Вы также должны вызывать [super viewDidLoad] в начале вашей реализации -viewDidLoad, и аналогичнодля -viewDidUnload.

Кроме того, вам не нужно объявлять свой класс как соответствующий UITableViewDataSource или UITableViewDelegate, поскольку ваш суперкласс (UITableViewController) уже делает это для вас.

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