2012-11-28 6 views
8

मेरे पास एक ऐप है जो आईओएस 6 में यूआईकिट राज्य संरक्षण का उपयोग कर रहा है। मैं दृश्य नियंत्रकों की स्थिति को सहेजने/पुनर्स्थापित करने में सक्षम हूं, यानी कौन सा टैब चुना गया है और नेविगेशन नियंत्रक पदानुक्रम, हालांकि मैं इसे अपने ऑफसेट को पुनर्स्थापित करने के लिए मेरा टेबल दृश्य नहीं मिल सकता है।यूआईकिट राज्य संरक्षण स्क्रॉल ऑफ़सेट को पुनर्स्थापित नहीं कर रहा है

- (NSString *)modelIdentifierForElementAtIndexPath:(NSIndexPath *)indexPath inView:(UIView *)view 
{ 
    TSStatus *status = [self._fetchedResultsController objectAtIndexPath:indexPath]; 

    return status.objectID.URIRepresentation.absoluteString; 
} 

- (NSIndexPath *)indexPathForElementWithModelIdentifier:(NSString *)identifier inView:(UIView *)view 
{ 
    NSURL *statusURL = [NSURL URLWithString:identifier]; 
    NSManagedObjectID *statusID = [[TSDataController sharedController].persistentStoreCoordinator managedObjectIDForURIRepresentation:statusURL]; 
    TSStatus *status = (TSStatus *)[[TSDataController sharedController].mainContext objectWithID:statusID]; 

    return [__fetchedResultsController indexPathForObject:status]; 
} 

modelIdentifierForElementAtIndexPath:inView: जब एप्लिकेशन को पृष्ठभूमि में चला जाता है कहा जाता हो रही है: मैं देखने के लिए मेरी स्टोरीबोर्ड में एक बहाली पहचानकर्ता के रूप में अच्छी तरह से देखने के नियंत्रक और दृश्य नियंत्रक (तालिका के डेटा स्रोत) को लागू करता है UIDataSourceModelAssociation इस प्रकार है , हालांकि modelIdentifierForElementAtIndexPath:inView: कभी नहीं बुलाया जाता है।

+1

मुझे लगता है कि आपका समापन अनुच्छेद एक टाइपो है? --- "modelIdentifierForElementAtIndexPath: inView: जब ऐप पृष्ठभूमि में जाता है तो कॉल किया जा रहा है, हालांकि मॉडल आईडीडिफायरफोरएमेंट एट इंडेक्सपैथ: इन व्यू: कभी नहीं कहा जाता है।" नेविगेशन में – Daniel

उत्तर

2

यह आपके प्रश्न का वास्तविक उत्तर नहीं है, लेकिन मैं अपनी सामग्री को पुनर्स्थापित करने के लिए तालिका दृश्य प्राप्त करने में सक्षम नहीं हूं, या तो।

मुझे लगता है कि इस iOS 6 में एक बग है, क्योंकि प्रलेखन स्पष्ट रूप से, कहा गया है कि एक UITableView अपने contentOffset पुनर्स्थापित करता है जब 1) यह एक restorationIdentifier 2) दृश्य नियंत्रक दृश्य के अंतर्गत आता है है एक restorationIdentifier और 3) डेटा है स्रोत UIDataSourceModelAssociation प्रोटोकॉल के अनुरूप है।

आप contentOffset और चयनित आइटम मैन्युअल रूप से अपने दृश्य नियंत्रक में, हालांकि बहाल कर सकते हैं:

- (void)encodeRestorableStateWithCoder:(NSCoder *)coder 
{ 
    [super encodeRestorableStateWithCoder:coder]; 

    [coder encodeObject:[NSValue valueWithCGPoint:self.tableView.contentOffset] forKey:@"tableView.contentOffset"]; 

    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
    if (indexPath != nil) { 
     NSString *modelIdentifier = [self modelIdentifierForElementAtIndexPath:indexPath inView:self.tableView]; 
     [coder encodeObject:modelIdentifier forKey:@"tableView.selectedModelIdentifier"]; 
    } 
} 

- (void)decodeRestorableStateWithCoder:(NSCoder *)coder 
{ 
    [super decodeRestorableStateWithCoder:coder]; 

    CGPoint contentOffset = [[coder decodeObjectForKey:@"tableView.contentOffset"] CGPointValue]; 
    self.tableView.contentOffset = contentOffset; 

    NSString *modelIdentifier = [coder decodeObjectForKey:@"tableView.selectedModelIdentifier"]; 
    if (modelIdentifier != nil) { 
     NSIndexPath *indexPath = [self indexPathForElementWithModelIdentifier:modelIdentifier inView:self.tableView]; 
     if (indexPath != nil) { 
      [self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; 
     } 
    } 
} 

मुझे पता नहीं क्यों UITableView कि स्वचालित रूप से काम नहीं करता है, भले ही प्रलेखन कहना है कि वह करता है। अगर कोई जवाब जानता है, तो कृपया टिप्पणी करें।

3

मुझे लगता है कि यह काम कर सकता है, अगर UITableView भी में एक बहाली आईडीडिफायर सेट है।

हालांकि यह UITableViewController UINavigationController के अंदर है, तो यह काम नहीं करता है। यह ऐप्पल, समस्या आईडी: 13536778 को बताया गया है। यह समस्या आईओएस 6.0 और 6.1.3 दोनों पर होती है।

+0

तालिका नियंत्रक: आईओएस 9 में अभी भी एक बग जैसा दिखता है – Jaro

2

यह आईओएस में एक बग है 6.

UIDataSourceModelAssociation प्रोटोकॉल का उपयोग तुम इतनी तरह -indexPathForElementWithModelIdentifier:inView: में मान्य सूचकांक पथ लौटने से पहले अपनी तालिका दृश्य पर -reloadData बुलाना चाहिए काम कर अपने तालिका दृश्य के लिए राज्य बहाली पाने के लिए:

- (NSIndexPath *)indexPathForElementWithModelIdentifier:(NSString *)identifier inView:(UIView *)view 
{ 
    NSURL *statusURL = [NSURL URLWithString:identifier]; 
    NSManagedObjectID *statusID = [[TSDataController sharedController].persistentStoreCoordinator managedObjectIDForURIRepresentation:statusURL]; 
    TSStatus *status = (TSStatus *)[[TSDataController sharedController].mainContext objectWithID:statusID]; 

    [self.tableView reloadData]; 

    return [__fetchedResultsController indexPathForObject:status]; 
} 
+0

इस के लिए धन्यवाद! –

+0

यह बग आईओएस 7 के साथ तय किया गया प्रतीत होता है। मुझे तालिका दृश्य के लिए स्थिति को पुनर्स्थापित करने के लिए अब reloadData को कॉल करने की आवश्यकता नहीं है। – bilobatum

संबंधित मुद्दे

 संबंधित मुद्दे