2010-12-14 4 views
1

Ich habe diese Tabellenansicht in meiner App, die einen bestimmten Artikel-Namen wie "Apple" hat. Wenn der Benutzer auf das ausgewählte Objekt tippt, wird es an eine Detailansicht weitergeleitet, die ein Bild und eine Beschreibung des ausgewählten Objekts anzeigt. Ich dachte daran, plist's zu benutzen, aber ich weiß nicht wie. Bitte hilf mir.Verwendung von plist in einer Detailansicht

Ich habe mir einige Quellen wie iCodeBlog angeschaut, aber sie erklären nicht wirklich, wie man so gut abruft und speichert. Vielleicht können Sie auch auf einige Links verweisen, die das besser beschreiben.

Heres ein Plist, den ich ausprobiert habe. Jedes der Elemente (Orange, Apple) hat die Daten, die ich in meiner Detailansicht anzeigen möchte. Ich möchte grundsätzlich die angezeigten Daten anzeigen.

alt text

+0

Können Sie weitere Informationen zur Verfügung stellen? Was meinst du mit plits, um es zu tun? – ughoavgfhw

+0

Ich habe gerade einen Tippfehler in meinem letzten Kommentar bemerkt. Ich meinte plists, nicht plits. – ughoavgfhw

+0

Ich werde meine Frage bearbeiten. – Souljacker

Antwort

2

Hier ist ein Beispiel-View-Controller, der das macht, was Sie wollen. Ich benannte die Klasse DetailViewController und lud die Pliste von Details.plist in die Ressourcen der App. Bilder befinden sich auch in den Ressourcen der App.

DetailViewController.h

#import <UIKit/UIKit.h> 
@interface DetailViewController : UIViewController { 
    UILabel *description; 
    UIImageView *imageView; 
    NSString *selectedItem; 
} 
@property (nonatomic, retain) IBOutlet UILabel *description; 
@property (nonatomic, retain) IBOutlet UIImageView *imageView; 
@property (nonatomic, copy) NSString *selectedItem; 
@end 

DetailViewController.m

#import "DetailViewController.h" 
@implementation DetailViewController 
@synthesize description, imageView, selectedItem; 

- (void)viewDidLoad { 
    NSDictionary *details = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Details" ofType:@"plist"]]; 
    details = [details objectForKey:self.selectedItem]; 
    self.description.text = [details objectForKey:@"description"]; 
    self.imageView.image = [UIImage imageNamed:[details objectForKey:@"image"]]; 
} 
@end 

Dann alles, was Sie tun müssen, ist die selectedItem Eigenschaft aktualisieren, bevor die Ansicht geladen und eine NIB-Datei mit dem an ihren Auslässen angebracht Beschreibung Etikett und Bildansicht erstellen.

+0

Wie aktualisiere ich die Eigenschaft selectedItem genau? – Souljacker

+0

danke, das war ziemlich einfach – Souljacker

0

ein Array in einer plist mit einer Anzahl von Elementen schaffen, das die Anzahl der Reihen gleich ist. Erstellen Sie in jedem Element eine Zeichenfolge namens description und eine Zeichenfolge namens image. Holen Sie sich die Nummer der ausgewählten Zeile in didSelectRowAtIndex: Methode. Bewahren Sie das Wörterbuch in einem NSDictionary

[myDictionary initWithDictionary:[myArray objectAtIndex:indexPath.row]]

erhalten dann die imagestring und die Beschreibung Zeichenfolge von

[myDictionary objectForKey:@"image"]

aufrufen und diese Strings in die Detailansicht passieren.

1

Übergeben Sie eine NSString an die Detailansicht und laden Sie das Element basierend auf dem NSString. Dies könnte ein bestimmter Wörterbuchname oder ein Element in einem Array sein.

newDetailViewController.currentItem = @"Array1"; 

und in meiner Detailansicht definieren:

.h 
    NSString *currentItem; 
    @property(nonatomic,retain) NSString *currentItem; 
.m 
    @synthesize currentItem; 

Jetzt currentItem im Detail Controller "Array1" sein, denn das ist, was wir an sie übergaben.

Es hängt alles davon ab, wie Sie Ihren PLIST einrichten, verwenden Sie eine NSArray, eine NSDictionary?

Es gibt viele Möglichkeiten, dies zu verwenden, setzen können:

NSString *current = [NSString stringWithFormat:@"%@/%@",appDocsPath,currentItem]; 
    NSMutableDictionary* dict = [[[NSMutableDictionary alloc] initWithContentsOfFile:current] autorelease]; 

Auch hier ist ein Beispiel Daten von Übergang von einem tableView zu einem detailViewLoading Detail View

EDIT VON FRAGE: Verwenden Sie das obige Beispiel:

aLabel.text = [dict [email protected]"description"]; 
1

Plists sind für viele Fälle wirklich nützlich:

+ (NSMutableDictionary*) containerDictionary { 

    NSString *path = [[NSBundle mainBundle] bundlePath]; 
    NSString *finalPath = [path stringByAppendingPathComponent:@"ContainerGraphics.plist"]; 
    NSMutableDictionary *plistData = [NSMutableDictionary dictionaryWithContentsOfFile:finalPath]; 

    return plistData; 

} 

Dies lädt eine plist-Datei (Property List) namens "ContainerGraphics.plist" von meinem apps Bündel.

Die Plist-Datei ist eigentlich nur eine XML-Datei. Sie können einen in Xcode erstellen, indem Sie "neue Datei" -> "Ressource" -> "Eigenschaftsliste" auswählen.

Sie nicht wirklich sagen, was es Sie nicht verstehen, ist, also wenn es etwas Bestimmtes ist, dass Sie schwer zu begreifen finden, erarbeiten bitte :)

EDIT:

Mit dem plist Sie post, verwende meinen obigen Ansatz, um die PLIST-Datei zu laden. Dann ist es ein NSDictionary von NSDictionaries ..

So zum „Apple“ Wörterbuch erhalten Sie gehen:

NSDictionary *appleDictionary = [plistData objectForKey:@"Apple"]; 

Was bedeutet, etwas zusammen - in die Liste gehen und das „Apple“ Wörterbuch abrufen.

nun das Bild und Beschreibung Werte erhalten Sie gehen würde:

NSString *imagePath = [appleDictionary objectForKey:@"image"]; 
NSString *descriptionString = [appleDictionary objectForKey:@"description"]; 

Das ist ziemlich viel, was es da ist.

Wenn Sie eine Tabelle haben, die mit diesen Daten gefüllt werden muss, gibt es einen Haken! Die Daten in einem NSDictionary haben keine Reihenfolge. Sie können also nicht einfach auf [dictionary objectAtIndex: indexPath.row] verweisen, wie Sie es bei einem Array von Daten für eine tableView tun würden.

Was Sie dann tun, ist, zuerst die plistData zu bekommen, wie in meinem ersten Beispiel. (dies in ViewDidLoad tun). Dann extrahieren Sie alle Schlüssel aus dem PlistData-Wörterbuch - beachten Sie, dass das "Top-Wörterbuch ist spezifisch", Apple, "Orange" usw. nicht Werte, die Sie in Ihre App hardcodieren möchten. Aber die Wörterbücher innerhalb dieser Wörterbücher sind die allgemeinen, Bild, Beschreibung ...

Also:

NSArray *allKeys = [plistData allKeys]; 

die allKey Array enthält nun Tasten (Apfel, Orange, etc.) auf die NSDictionaries im plistData zu bekommen.

Im cellForRowAtIndexPath Methode können Sie jetzt gehen:

NSDictionary *dictionaryForCurrentCell = [plistData objectForKey:[allKeys objectAtIndex:indexPath.row]]; 
[cell.textLabel setText:[dictionaryForCurrentCell objectForKey:@"image"]]; 
[cell.detailLabel setText:[dictionaryForCurrentCell objectForKey:@"description"]]; 

Hoffe, es hilft :)

Verwandte Themen