Таким образом, в основном я пытаюсь создавать экземпляры класса ниже каждый раз, когда я получаю действительный ответ от веб-запроса, а затем сохраняю эти экземпляры в массиве, чтобы я мог получить доступ к их данным позже.Затем я пытаюсь заполнить табличное представление конкретными полями из экземпляров, которые хранятся в массиве.У меня были некоторые проблемы, так как я очень хорошо знаком с C ++ и делаю такие вещи с векторами, а затем просто получаю доступ, основываясь на нужном мне индексе, но это заставило меня вырваться из головы!Спасибо, код ниже:
eventDetails.h:
@interface eventDetails : NSObject {
NSString *eventName, *eventID;
}
-(void) setEventID : (NSString *) ID;
-(void) setEventName: (NSString *) name;
-(NSString *) getEventName;
-(NSString *) getEventID;
, а также обратите внимание, что
NSMutableArray *events
объявлено в моем файле .h и
events = [[NSMutableArray alloc] init];
был вызван в viewDidLoad
Затем я динамически создаю экземпляры при получении ответа от веб-запроса и добавляю их в массив:
if ([elementName isEqualToString:@"id"])
{
NSLog(@"at beginning of event, length is %i", [events count]);
temp = [[eventDetails alloc] init];
[temp setEventID:[NSMutableString stringWithString:soapResults]];
[soapResults setString:@""];
elementFound = FALSE;
}
if ([elementName isEqualToString:@"name"])
{
[temp setEventName:[NSMutableString stringWithString:soapResults]];
[events addObject:temp];
[soapResults setString:@""];
elementFound = FALSE;
//[temp release];
}
После того, как все будетПосле всего, что я сделал, я создал небольшую тестовую функцию, чтобы убедиться, что данные были установлены правильно:
-(void) test{
for (eventDetails *s in events){
NSLog(@"Entry ID: %@ with name %@", [s getEventID], [s getEventName]);
}
}
, и я получаю следующий (правильный) вывод:
2011-04-09 18: 53: 24.624 Validator [90982: 207] Идентификатор записи: 701 с именем iPhone Test Event 2011-04-09 18: 53: 24.625 Validator [90982: 207] Идентификатор записи: 784 с именем Another iPhone Test Event 2011-04-09 18: 53: 24.626 Валидатор [90982: 207] Идентификатор записи: 839 с именем третье iphone
Затем я пытаюсь обновить представление таблицы и получить от него данные из экземпляров вмассив:
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
//---try to get a reusable cell---
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
//---create new cell if no reusable cell is available---
if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier] autorelease];
}
//---set the text to display for the cell---
eventDetails *cellDetails = [[eventDetails alloc] init];
NSInteger row = [indexPath row];
cellDetails = [[self events] objectAtIndex:row];
NSString *cellValue = [cellDetails getEventName];
NSLog(@"Event is: %@", cellValue);
cell.textLabel.text = cellValue;
cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
return cell;
}
Но каждый раз, когда программа попадает в эту часть, она вылетает, что EXC_BAD_ACCESS, где я говорю:
cell.textLabel.text = cellValue;
Спасибо за вашу помощь.Я думаю, что я могу сделать что-то не так с тем, как я объявляю экземпляры класса eventDetails, но я не уверен, так как он работает правильно для хранения этих данных.Если вам нужно больше кода, у меня есть пропущенные разделы.