@interface Week : NSManagedObject {
}
@property (nonatomic, retain) NSNumber *weekID;
@property (nonatomic, retain) NSString *top;
@property (nonatomic, retain) NSString *summary1;
@property (nonatomic, retain) NSMutableArray *book;
@end
Я читаю XML-файл с сервера и помещаю вэйлсы в вышеуказанную сущность. Так как книг для чтения за эту неделю может быть несколько, поэтому он хранится в MutableArray. Я сделал * book для преобразования в мой .xcdatamodel файл.
Мой синтаксический анализатор выглядит следующим образом: Недельная сущность .
if ([currentTag isEqualToString:@"book"]) {
NSString *USGSWebLink = [currentElementValue1 stringByStandardizingPath] ;
[week.book addObject:USGSWebLink];
[week setBook:week.book];
NSError *error;
if (![self.managedObjectContext save:&error]) {
NSLog(@"%@", [error domain]);
}
Это нормально хранится, потому что я извлекаю вышеуказанное значение из Coredata и сохраняю в NSMutableArray "weekArray" ** для отображения в ** UITableView .
Моя программа падает ниже двух функций, а точка сбоя переключается между двумя ниже функциями ... странно !!!
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
**//sometimes program crashes at this point**
return [weekArray count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSManagedObject *object = (NSManagedObject *)[weekArray objectAtIndex:indexPath.row];
**// program crash at the above line.**
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}
cell.textLabel.text = [object valueForKey:@"top"];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
// Set up the cell
return cell;
}
* Пожалуйста, скажите мне, где я делаю не так? Это проблема в том, как я храню книгу NSMutableArray в моем парсере или
NSManagedObject *object = (NSManagedObject *)[weekArray objectAtIndex:indexPath.row];
линия
Потому что мой NSLog не печатает ниже indexPath.row line.
Моя функция выборки :
- (void)fetchRecords {
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Week" inManagedObjectContext:appDelegate.managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity]; //NSLog(@"fetchRecords = %@",appDelegate.managedObjectContext );
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"weekID" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
[request setSortDescriptors:sortDescriptors];
[sortDescriptor release];
NSError *error;
NSMutableArray *mutableFetchResults = [[[managedObjectContext executeFetchRequest:request error:&error] mutableCopy] autorelease] ;
if (!mutableFetchResults) {
}
if (mutableFetchResults == nil) {
NSLog(@"week fetch failed");
}
self.weekArray = mutableFetchResults; NSLog(@"weekArray = %@",weekArray);
[mutableFetchResults release];
[request release];
}