Программно загружать данные в конечный вид с использованием предиката coredata, как будто в таблице уже выбрана строка - PullRequest
1 голос
/ 13 сентября 2011

Я пытаюсь использовать отличный код в http://blog.sallarp.com/iphone-core-data-uitableview-drill-down/ для заполнения всплывающих окон с мехами

// Override point for customization after app launch    
NSManagedObjectContext *context = [self managedObjectContext];

// We're not using undo. By setting it to nil we reduce the memory footprint of the app
[context setUndoManager:nil];

if (!context) {
    NSLog(@"Error initializing object model context");
    exit(-1);
}

// Get the url of the local xml document
NSURL *xmlURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Data" ofType:@"xml"]];

NSError *parseError = nil;

// Parse the xml and store the results in our object model
LocationsParser *xmlParse = [[LocationsParser alloc] initWithContext:context];
[xmlParse parseXMLFileAtURL:xmlURL parseError:&parseError];
[xmlParse release];


// Create a table view controller
RootViewController *rootViewController = [[RootViewController alloc] initWithStyle:UITableViewStylePlain];



/*
 ORIGINAL
 */
rootViewController.managedObjectContext = context;
rootViewController.entityName = @"County";

Если я изменю entityName на

rootViewController.entityName = @"Province";

Itзагружает второй уровень данных в исходное представление, но я хочу загрузить только второй уровень данных, принадлежащий определенной строке первого уровня.

Таким образом, заменяя две строки, помеченные как оригинальныес

// Get the object the user selected from the array
NSManagedObject *selectedObject = [entityArray objectAtIndex:0];

// Pass the managed object context
rootViewController.managedObjectContext = self.managedObjectContext;

rootViewController.entityName = @"Province";

// Create a query predicate to find all child objects of the selected object. 
NSPredicate *predicate = nil;
predicate = [NSPredicate predicateWithFormat:@"(ProvinceToCounty == %@)", selectedObject];
NSLog(@"selectedObject %@",selectedObject);

Это сработало бы, если бы я мог понять, как заменить entityArray ссылкой на начальную загрузку данных.

Надеюсь, что это имеет смысл.

Безлюбой код, которого я надеюсь достичь, - это использовать XML для заполнения четырех различных всплывающих окон uitableview, каждый из которых уже детализировал уровень данных при загрузке.Я могу получить доступ ко всем вторым данным из всех строк первого уровня, но это бесполезно, мне нужны только данные второго уровня из одной строки первого уровня для каждого всплывающего просмотра.

т.е. эмулировать это

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

    // Force the data from index 1 of first tier
    NSManagedObject *selectedObject = [entityArray objectAtIndex:1];

    rootViewController.managedObjectContext = self.managedObjectContext;
    NSPredicate *predicate = nil;


    rootViewController.entityName = @"Province";

    predicate = [NSPredicate predicateWithFormat:@"(ProvinceToCounty == %@)", selectedObject];

    NSLog(@"selectedObject %d %@",indexPath.row, selectedObject);

Я многому научился за последние четыре часа, но недостаточно, и теперь я побежден ...

...