NSTreeController
'un temsil ettiği model nesneleri verildiğinde, dizin yollarını ağaçta nasıl buluyorsunuz ve sonra bunları seçiyorsunuz? Bu açık bir şekilde bariz bir sorun gibi görünüyor, ama ben herhangi bir referans bulmak için görünmüyor olabilir. Herhangi bir fikir? hayır "kolay" yolu varModel nesne verildiğinde, NSTreeController'da dizin yolu nasıl bulunur?
cevap
, ağaç düğümlerini yürümek ve eşleşen dizin yolunu bulmak zorunda, gibi bir şey:
Objective-C:
Kategori
@implementation NSTreeController (Additions)
- (NSIndexPath*)indexPathOfObject:(id)anObject
{
return [self indexPathOfObject:anObject inNodes:[[self arrangedObjects] childNodes]];
}
- (NSIndexPath*)indexPathOfObject:(id)anObject inNodes:(NSArray*)nodes
{
for(NSTreeNode* node in nodes)
{
if([[node representedObject] isEqual:anObject])
return [node indexPath];
if([[node childNodes] count])
{
NSIndexPath* path = [self indexPathOfObject:anObject inNodes:[node childNodes]];
if(path)
return path;
}
}
return nil;
}
@end
Swift:
Uzatma
extension NSTreeController {
func indexPathOfObject(anObject:NSObject) -> NSIndexPath? {
return self.indexPathOfObject(anObject, nodes: self.arrangedObjects.childNodes)
}
func indexPathOfObject(anObject:NSObject, nodes:[NSTreeNode]!) -> NSIndexPath? {
for node in nodes {
if (anObject == node.representedObject as! NSObject) {
return node.indexPath
}
if (node.childNodes != nil) {
if let path:NSIndexPath = self.indexPathOfObject(anObject, nodes: node.childNodes)
{
return path
}
}
}
return nil
}
}
böyle ana öğeleri almak için NSOutlineView kullanmayın Neden:
NSMutableArray *selectedItemArray = [[NSMutableArray alloc] init];
[selectedItemArray addObject:[self.OutlineView itemAtRow:[self.OutlineView selectedRow]]];
while ([self.OutlineView parentForItem:[selectedItemArray lastObject]]) {
[selectedItemArray addObject:[self.OutlineView parentForItem:[selectedItemArray lastObject]]];
}
NSString *selectedPath = @".";
while ([selectedItemArray count] > 0) {
OBJECTtype *singleItem = [selectedItemArray lastObject];
selectedPath = [selectedPath stringByAppendingString:[NSString stringWithFormat:@"/%@", singleItem.name]];
selectedItemArray removeLastObject];
}
NSLog(@"Final Path: %@", selectedPath);
çıktısı verir: ./item1/item2/item3/...
Burada bir dosya yolu aradığınızı varsayalım ancak veri kaynağınızın temsil ettiği her şeyi ayarlayabilirsiniz.
Soru ağacın belirli bir nesne için bir NSIndexPath arıyor, böylece ağaç denetleyicisinin selectedIndexPath (s) bir programsal olarak değiştirebilirsiniz. Nesnenin zaten seçildiğini varsayıyorsunuz. Eğer öyleyse, treeI denetleyicisinden selectionIndexPath alırsınız! – stevesliva
- 1. Eksik etiketli nesne nasıl bulunur?
- 2. Belirli bir dizin numarasında Laravel'de Koleksiyon Nesnesine nesne (Model türü nesne) nasıl eklenir?
- 3. Rol Nesne model sorusu
- 4. Ruby nesne tarafından kullanılan bellek nasıl bulunur?
- 5. Model nesne verileriyle formu nasıl doldurabilirim?
- 6. Kullanıcı yetkilendirmesinden sonra dizin/dizin yolu modeli kancası nasıl çağırılır?
- 7. Laravel Model Oluşturucu Üzerinde Tanımsız Dizin
- 8. Oracle 11g sistemindeki kullanılabilir dizin nesneleri nasıl bulunur?
- 9. Matlab'da belirtilen bir dizine en yakın dizin nasıl bulunur?
- 10. JFileChooser kullanarak dizin yolu nasıl alınır?
- 11. Sanal dizin fiziksel yolu nasıl edinilir
- 12. Doğum tarihi verildiğinde, mevcut yaşı nasıl hesaplayabilirim?
- 13. MOBDB'de Casbah ile Nesne Kimliği ile Nasıl Bulunur?
- 14. Nesne boyutu (dahil olan nesneler dahil) nasıl bulunur?
- 15. Sharepoint İstemcisi Nesne Model ayarı ModifiedBy alanı
- 16. Nesne dizin imzaları dizi türlerine eşdeğer mi?
- 17. Bir Facebook erişim belirteci verildiğinde, sahip olduğu izinleri nasıl alabilirim?
- 18. DB veya yeni bir nesne için model nesnesi nasıl denetlenir?
- 19. Html.Display özel bir nesne için nasıl çağrılır, bütün Model değil?
- 20. Django şablonlarında model için nesne sayısını nasıl alabilirim?
- 21. Herhangi bir sınıf türünün bir örneği verildiğinde, hangi üst sınıfın ve/veya özelliklerin miras aldığı veya uygulandığı nasıl bulunur?
- 22. Model eşleme dizisi anlamalarının deyimsel yolu nedir?
- 23. Bir rpm paket adı verildiğinde,
- 24. C# türünde bir yere .cs dosya yolu nasıl bulunur? #
- 25. Gerektiğinde dizin nasıl oluşturulur?
- 26. Yeniden Yazma Kök Dizin Yolu "/" JavaScript
- 27. Ülkeler listesi nasıl bulunur?
- 28. ServiceManager'ı Model Sınıfında kullanmanın en iyi yolu?
- 29. Yinelenen Nesnenin boyutu nasıl bulunur?
- 30. Yürütülebilir dizin olarak paylaşılan kitaplık yolu
Bu gerçekten verimsiz. Model ve treenodlar arasında bir haritalamayı koruyan bir ağaç kontrolcü alt sınıfı yazmayı düşünüyorum. Ya da modelde ilgili treenode'a referanslar tutan bir kategori. – Tony
Alt sınıfınızda yapmanız gereken tek şey ağaç düğümlerinin düz bir "NSMutableArray" değerini korumaktır. Elbette düğümlerdeki tüm modifikasyonların elbette dizinize yansıtıldığından emin olmalısınız. –
Hmm, arama için daha verimli göründüğünden, model nesnesini veya objectID'yi NSTreeNode işleviyle eşleştiren bir 'NSMutableDictionary' düşünmekteydim. NSmutableArray'ın betteR'de çalışmasının bir sebebi var mı? – Tony