NSMutableArray -> NSUserDefaults & Custom TableView Cells

iYassin

Galloway Pepping
Registriert
13.04.09
Beiträge
1.365
Ich hab mal wieder Fragen:

Zum einen: Meine App besitzt Twitter-Integration, und der Username soll ja auch gespeichert werden, dafür sichere ich den Wert der beiden UITextFields (Username und Passwort) in die NSUserDefaults, ich definiere
Code:
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
und speichere danach mit "setObject" die Strings ab bzw. rufe sie mit "stringForKey" wieder ab. Das funktioniert auch perfekt.
Jetzt habe ich aber auch noch eine Highscore-Funktion, die Highscores werden in ein NSMutableArray geschrieben, und das möchte ich sichern. Dazu definiere ich dann in der "AppWillTerminate"-Methode in der App Delegate wieder die NSUserDefaults und schreibe dann mit
Code:
[NSUserDefaults setObject:highScores forKey:@"HighscoreArray"];
das Array in die NSUserDefaults. Wenn ich die App aufrufe, ist im Header meines RootViewControllers das Array definiert. Im viewDidLoad des RootViewControllers wird dann der alloc- und init-Befehl an das Array gesendet. Dann habe ich versucht, über
Code:
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
	highScores = [prefs arrayForKey:@"HighscoreArray"];
das Array aus den NSUserDefaults zu laden - funktioniert nicht. Die Liste bleibt leer. Wenn ich über den Speichern-View Einträge erstelle, sind die dann zu sehen, aber eben nur, bis die App neu gestartet wird, dann ist die Highscore-Liste wieder leer.
Was mir noch auffiel: Ich bekomme eine Warnung, dass der ArrayForString-Befehl beim Aufrufen für NSArrays, nicht für NSMutableArrays gedacht sei - kann es daran liegen?
Meine Frage: Was mache ich falsch? ;) Ist da offensichtlich irgendwo ein Denkfehler/Tippfehler/Leichtsinnsfehler? :) Oder geht das so einfach nicht? Wenn das der Fall ist, hättet ihr einen Tipp für mich, wie es sonst geht?

Und die zweite Frage: Ich habe mal nach der Website (http://developer.apple.com/iphone/l...s.html#//apple_ref/doc/uid/TP40007451-CH7-SW1) hier ("The Technique for static row content") ein paar Custom UITableViewCells erstellt (allerdings mit anderen Namen und anderen Elementen in den Cells als im Tutorial) und so eingebunden, wie es da gezeigt wurde. Komisch war aber, dass das Layout irgendwie kaputt war. Ich habe ihm gesagt, Anzahl der Cells: 3, und dann, wie gezeigt, die drei Cells "returned" :D Dann hatte ich zwar drei Zeilen, aber die ersten beiden waren leer, die dritte war dann die, die eigentlich die erste sein sollte. Habe ich einmal nach oben gescrollt, war die erste dann an ihrem Platz, dann waren dafür die Reihen 2 und 3 leer, wo eigentlich auch Content sein sollte. Woran kann denn das liegen?

Vielen vielen Dank schonmal :)

//EDIT: Ach ja, noch eine Frage :) Wie kann ich denn einen View so von unten "einfliegen" lassen? Darin soll ein UITextView enthalten sein, und oben nach Möglichkeit diese Toolbar mit dem hellblauen "Done"-Knopf drin. Ich weiß nicht, nach was ich da googlen/die Apple-Dokumentation durchsuchen soll...
 
Zuletzt bearbeitet:

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
a) -stringForKey: liefert dir was?

b) Der Compiler hat sich nicht beschwert?
 

iYassin

Galloway Pepping
Registriert
13.04.09
Beiträge
1.365
Ups, das mit stringForKey im Code-Block war falsch, das hatte ich selbst hier eingeben und nicht kopiert - ich hatte da natürlich arrayForKey stehen. Mit stringForKey... hole ich mir die Userdaten für Twitter aus den NSUserDefaults.
Der Compiler gibt keinen Fehler raus, nur eine Warnung, weil arrayForKey wohl für NSArrays gedacht ist (nicht für NSMutableArrays), aber ich habe mal statt dem NSMutableArray ein NSArray verwendet (wobei ich eigentlich ein NSMutableArray haben will, damit ich es später noch nachträglich ändern kann), da hat sich nichts geändert, also, hat nicht funktioniert.
 

iYassin

Galloway Pepping
Registriert
13.04.09
Beiträge
1.365
//Update: Das mit dem Array speichern habe ich jetzt hinbekommen - es lag am NSMutableArray. Ich definiere jetzt ein NSArray als das Array aus den NSUserDefaults und sende dann an das NSMutableArray keinen einfachen init-Befehl, sondern einen initWithArray-Befehl und übergebe ihm das NSArray. Funktioniert also jetzt.
Frage 3 hat sich ebenfalls geklärt - das geht folgendermaßen:
Code:
[self.navigationController presentModalViewController:myView animated:YES];
und zum Ausblenden:
Code:
[self.parentViewController dismissModalViewControllerAnimated:YES];
Frage 2 wäre aber noch offen :D
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
Ups, das mit stringForKey im Code-Block war falsch, das hatte ich selbst hier eingeben und nicht kopiert - ich hatte da natürlich arrayForKey stehen. Mit stringForKey... hole ich mir die Userdaten für Twitter aus den NSUserDefaults.
Der Compiler gibt keinen Fehler raus, nur eine Warnung, weil arrayForKey wohl für NSArrays gedacht ist (nicht für NSMutableArrays), aber ich habe mal statt dem NSMutableArray ein NSArray verwendet (wobei ich eigentlich ein NSMutableArray haben will, damit ich es später noch nachträglich ändern kann), da hat sich nichts geändert, also, hat nicht funktioniert.
a) -arrayWithArray: (NSMutableArray), -mutableArrayValueForKey: (NSKeyValueCoding)
b) Warnungen sind Fehler.
 

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
Wie Amin sagt, aufpassen bei Warnungen. Die sind nicht zum übersehen da! Nur ein Programm, das ohne Warnungen kompiliert kann überhaupt richtig stabil sein, da fast alle Stellen, wo der compiler warnt, zu einem runtime-Fehler führen. Ich würde Warnungen in diesem Fall auch als Fehler ansehen. Du kannst den compiler übrigens Warnungen automatisch als Fehler ansehen lassen, indem du in den Project-settings "Treat warnings as errors" aktivierst, dann kompiliert das Programm mit Warnungen gar nicht mehr.

Gruss ppocket
 

iYassin

Galloway Pepping
Registriert
13.04.09
Beiträge
1.365
Das mit dem "Treat warnings as errors" habe ich nicht gefunden... aber ich habe dann plötzlich irgendwie 36 Warnungen gehabt, und dann fiel mir auf, dass ich bei 36 Variablen das @synthesize vergessen hatte :D Jetzt läuft die App irgendwie besser, finde ich :D
 

ifthenelse

Fießers Erstling
Registriert
07.12.06
Beiträge
129
Ich hätte aber noch eine Antwort auf eine nicht gestellte Frage:

Ich hab mal wieder Fragen:

Zum einen: Meine App besitzt Twitter-Integration, und der Username soll ja auch gespeichert werden, dafür sichere ich den Wert der beiden UITextFields (Username und Passwort) in die NSUserDefaults...

Username und Passwort gehören nicht in die UserDefaults, sondern in die KeyChain!