2012-07-13 18 views
1

我有一個名爲Practice的實體,我使用一個名爲SelectorViewController的View Controller來選擇其中一個實踐selectedPractice。然後,我將selectedPractice返回到名爲RegularViewController的視圖控制器,其中顯示了一些selectedPractice屬性。所有這些工作正常。然而,該應用程序還有許多其他視圖控制器,可以通過RegularViewController實例的模態細分來訪問。因此,如果我離開並返回到RegularViewController,selectedPractice將重置爲空。我還想保存selectedPractice,以便在應用程序初始化時可用,前提是它已在SelectorViewController中設置。我如何通過使selectedPractice在應用程序中保持持久性並在運行時可用來實現此目的?跨不同的控制器使用選定的NSManagedObject

問候

回答

1

感謝上面的帖子,這是偉大的,我設法排序它。這是我的代碼,可能非常笨拙,但它的工作原理。

首先,作爲予加載fetchedObjects到SelectorView控制器一個PickerView,我設置屬性「isSelectedPractice」到「NO」用下面的代碼:

for (Practice *fetchedPractice in [self.fetchedResultsController fetchedObjects]) { 
     [fetchedPractice setValue:@"NO" forKey:@"isSelectedPractice"]; 
     [self.managedObjectContext save:nil]; 

然後我確定了所選擇的做法:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 

    Practice *practice = [[self.fetchedResultsController fetchedObjects] objectAtIndex:row]; 
    self.selectedPractice = practice; 
    NSLog(@"The '%@' practice was selected using the picker", self.selectedPractice.name); 
} 

作爲視圖Segue'd回到RegularViewController我將selectedPractice的isSelectedPractice屬性設置爲YES。由於我不想在PickerView中使用isSelectedPractice YES導致出現多個對象,因此我遲遲沒有做這件事。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"SavedPractice Segue"]) 
    { 
     [self.selectedPractice setValue:@"YES" forKey:@"isSelectedPractice"]; 
     [self.managedObjectContext save:nil]; 
     NSLog(@"Setting SelectedPractice as '%@' in RegularViewController with isSelectedPractice as '%@'",self.selectedPractice.name,self.selectedPractice.isSelectedPractice); 
     RegularViewController *rvc= segue.destinationViewController; 
     rvc.delegate = self; 
     rvc.selectedPractice = self.selectedPractice; 

    } 
    else { 
     NSLog(@"Unidentified Segue Attempted!"); 
    } 
} 

我然後設置以下謂語RegularViewController的setupFetchedResultsController方法:

request.predicate = [NSPredicate predicateWithFormat:@"isSelectedPractice = %@", @"YES"]; 

的幫助

0

沒有看到實際的項目,我知道會工作,但可能是有點太圓一個回合將是一個屬性「isSelectedPractice」添加到您的實體的一種方式。你可以使它成爲一個BOOL,但是我在BOOL的核心數據中得到了不同的結果,我寧願將它作爲一個NSString並將其設置爲「是」或「否」。然後,當您將其拉下時,修改它或將其作爲isSelectedPractice設置爲「是」的實體添加到核心數據中。然後在你的其他控制器,做一個

if (self.managedObjectContext == nil) { 
    self.managedObjectContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
} 

然後做一個讀取請求得到一個謂語實體,其正在尋找isSelectedPractice等於「是」。如果你需要實際的代碼示例如何做到這一點,讓我知道,我會編輯它們。

+0

謝謝,我想知道使用屬性非常感謝你只不過是確認它。 SetValue:ForKey:如何應用於方法中的selectedPractice? – 2012-07-13 20:56:07

+0

對不起,你能詳細解釋一下你的意思嗎? – jacerate 2012-07-13 21:55:24

相關問題