2010-10-05 10 views
9

Hallo Ich frage mich, wie soll ich rtf oder Textdatei in UITextView laden i mehrere Codes verwenden, aber did't Arbeit,laden rtf oder Textdatei in UITextView iphone sdk

NSString* filePath = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"txt"]; 
myTextView.text = filePath; 

Ihnen danken.

Antwort

14

Sie mit diesem versuchen können:

NSString *myText = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil]; 
myTextView.text = myText; 
+0

danke funktioniert nicht, würden Sie bitte den editierten Beitrag sehen? –

+0

Warte, was ist dein textView, was ist deinText, es scheint, dass dein Variablenname Probleme hat. Können Sie den NSString nach dem Abrufen von '[NSString stringWithContentsOfFile ...]' ausdrucken. Ich möchte die Ergebnisse dort sehen – vodkhang

+0

myText ist 'UITextView' und 'myTextView' ist nur ein Name, meine Datei ist eine TXT-Datei mit UTF8 Encoding. –

8

Was Sie bisher getan haben, werden Sie den Namen der Datei erhalten, benötigen Sie noch einen Schritt weiter gehen und tatsächlich den Inhalt der Datei in eine lesen NSString mit etwas wie:

NSError *err = nil; 
NSString *fileContents = [NSString stringWithContentsOfFile:filePath 
          encoding:NSUTF8StringEncoding 
          error:&err]; 
if (fileContents == nil) { 
    NSLog("Error reading %@: %@", filePath, err); 
} else { 
    myTextView.text = fileContents; 
} 

Das funktioniert für Nur-Text (vorausgesetzt, Ihre Datei ist in UTF8-Codierung); Sie müssen etwas viel schicker für RTF tun (UITextView kann RTF nicht anzeigen).

+0

danke funktioniert nicht, würden Sie bitte den bearbeiteten Post sehen? –

+3

Wenn es nicht funktioniert, sollten Sie vielleicht den Fehlerstatus überprüfen (anstatt es zu ignorieren, indem Sie "nil" übergeben). –

8
myTextView.attributedText = 
[ NSAttributedString.alloc 
    initWithFileURL:[ NSBundle.mainBundle URLForResource:@"filename" withExtension:@"rtf" ] 
    options:nil 
    documentAttributes:nil 
    error:nullptr 
]; 
+1

Etwas seltsame Formatierung, aber es funktioniert zum Laden einer Rich-Text-Datei und zum Setzen der Eigenschaft attributedText eines 'UITextView'. – Dalmazio

+0

Das funktioniert, aber als Beispiel fördert es schlechte Praktiken. Die Verwendung der Punktsyntax zum Aufrufen von "alloc" ist im besten Fall verwirrend und im schlimmsten Fall ein Missbrauch der Punktsyntax. Wenn Sie nicht den Standardkonventionen für mehrzeilige Parameterausrichtungen folgen, ist es schwer zu lesen. – SwampThingTom

+0

Lohnt es sich, meinen Ruf zu verringern? Du Dogmatiker. – Satachito

0
  1. Ziehen Sie Ihre Textview Kontrolle (ich hatte 3 mal klicken, bis es NSTextView sagte), um Ihre AppDelegate.m Datei unterhalb der ersten @interface Linie. Meine war @interface AppDelegate(). Der Grund für die drei Klicks liegt darin, dass beim Ziehen eines TextView-Steuerelements in einem Fenster standardmäßig drei Steuerelemente erstellt werden und nur das innere, innere Steuerelement auf NSTextView festgelegt wird. Die anderen Steuerelemente befassen sich mit Scrollen und Screen-Clipping. Dann wählen Sie, um eine Steckdose zu erstellen und nennen Sie es so etwas wie txtRich oder was auch immer Sie wollen. Dies führt zu diesem Eintrag für mich in meinem Fall:
@property (unsafe_unretained) IBOutlet NSTextView *txtRich;
  1. eine Klassenmethode finden, wo Sie die RTFD laden mögen. Ich habe meins in der AppDelegate.m unter applicationDidFinishLaunching. Im Inneren, dass fügen etwas wie folgt aus:
NSBundle *myBundle = [NSBundle mainBundle]; 
NSString *sFile= [myBundle pathForResource:@"myrichfile" ofType:@"rtfd"]; 
[self.txtRich readRTFDFromFile:sFile]; 

Sie werden sich vielleicht fragen, wo diese mainBundle herkommt, und wenn Sie es irgendwo zu erklären. Die Antwort ist nein. Es ist eine verrückte Magie, die standardmäßig erstellt wird, genau wie die Variable NSNotificationCenter defaultCenter. Es bezieht sich auf Ihr eigenes Anwendungspaket.

  1. Verwenden Sie nun TextEdit, um eine Datei myrichfile.rtfd zu erstellen. Speichern Sie es in Ihrem Projektordner. Ziehen Sie es in Ihr Projektfenster unter den Unterstützungsdateien. Wenn Sie dazu aufgefordert werden, gehen Sie mit den Standardeinstellungen. Dies bündelt es mit Ihrem Projekt in einem Ressourcen-Ordner.