2011-08-31 17 views
5

:NSFetchedResultsController ve bölümNameKeyPath kullanırken bölüm adı nasıl alınır? Aşağıdaki kodda

NSFetchedResultsController *frc = 
[[NSFetchedResultsController alloc] 
initWithFetchRequest:fetchRequest 
managedObjectContext:myManagedObjectContext 
sectionNameKeyPath:@"store" 
cacheName:@"SomeCache" 
]; 

sectionNameKeyPath için @ "store" değeri aslında ben gerçekten benim bölüm başlığı başlık olarak gereken bir ad özelliği vardır İstiyorum varlığa bir ilişkiye işaret etmektedir. Mağaza nesne kadarını söyleyebilirim sürede getirilir olduğu için kod veri adresleri 0x5b504f0 0x5b51190 :

Ama yolu kodum ben artık şöyle bölüm başlıkları almak gibi başarılı olamaz kurulduğundan.

NSFetchedResultsController'ı nasıl kullanabilirim, bu nedenle sectionNameKeyPath: @ "store" öğesinden ne alırsa getirileceğini belirtmek isteyebilirim? Ya da başka bir çözüm var mı?

cevap

5

Bu eski iplik olduğunu biliyorum

+1

Teşekkür ederiz! Sadece sahne vermek için aşağıdakiler yardımcı oldu: http://stackoverflow.com/questions/2353924/core-data-fetched-results-controller-and-custom-section-header – pulkitsinghal

1

sectionNameKeyPath:@"store.name" deneyin ama Swift kullanarak çözüm eklemek istiyorum.

Bu çözümün, NSFetchedResultsController tarafından döndürülen bölüm adının biçimine bağlı olduğunu, bu nedenle Apple tarafından değiştirilebilecek dahili uygulamalara bağlı olduğuna dikkat etmeliyim.

bölüm adı Kalıcı Veri Store nesne kimliğinin URI içeren, bu nedenle ilk gelen URI

override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
    let sectionInfo = fetchedResultsController?.sections![section] 
    let sectionName = sectionInfo?.name 

    //This part depends on the internal implementation of sectionInfo.name 
    let initialRange = sectionName?.rangeOfString("<") 
    let finalRange = sectionName?.rangeOfString(">") 

    let uri = sectionName?.substringWithRange((initialRange?.endIndex)!..<(finalRange?.startIndex)!) 
    let url = NSURL(string: uri!) 

    let store = fetchedResultsController?.managedObjectContext.persistentStoreCoordinator 

    let objectID = store?.managedObjectIDForURIRepresentation(url!) 
    let coreObject = fetchedResultsController?.managedObjectContext.objectWithID(objectID!) 
    //return the correct property from the object as the title 
    let title = ... 
    return title 
} 

ile nesne için Store'u soran sonra URI ayıklanması ve nesneyi elde edebilirsiniz Peki, hataları kontrol etmelisiniz (guard'u let numaralı telefonun önünde kullanıyorum) ama siz düşünün.

İlgili konular