У меня есть вспомогательный класс, предназначенный для получения данных из Core Data и передачи их обратно в контроллер представления.Вот код:
View Controller :
@interface AnnouncementsController : UIViewController
@property (nonatomic, retain) NSMutableArray *announcements;
@end
@implementation AnnouncementsController
@synthesize announcements;
- (void)viewDidLoad
{
AnnouncementCoreDataHelper *announcementHelper = [[AnnouncementCoreDataHelper alloc] init];
self.announcements = [announcementHelper selectAnnouncementsWithPredicate:@"isActive = 1" sortDescriptor:@"lastUpdated" sortAscending:NO];
[super viewDidLoad];
}
@end
И Core Data Helper реализация:
// Select one or more announcements based on a predicate if passed in and a sort order
- (NSMutableArray*)selectAnnouncementsWithPredicate:(NSString *)predicateString sortDescriptor:(NSString *)sortBy sortAscending:(BOOL)isAscending
{
NSError *error = nil;
// Build the entity and request
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Announcement" inManagedObjectContext:managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity];
if(predicateString)
{
// Set the search criteria
NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateString];
[request setPredicate:predicate];
}
if(sortBy)
{
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:sortBy ascending:isAscending];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
}
// Perform the search
NSMutableArray *results = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
if(results == Nil)
{
NSLog(@"%@", error);
}
return results;
}
Проблема заключается в том, что Core Data Helper возвращает два объекта в своих результатах NSMutableArray, но объявления NSMutableArray View Controller получают ноль.Что теряется при передаче NSMutableArray обратно от помощника к контроллеру?Если я изменяю все переменные и результаты на NSArray, все работает.