1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

NSMutableArray -> NSUserDefaults & Custom TableView Cells

Dieses Thema im Forum "iOS-Developer" wurde erstellt von iYassin, 05.10.09.

  1. iYassin

    iYassin Galloway Pepping

    Dabei seit:
    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...
     
    #1 iYassin, 05.10.09
    Zuletzt bearbeitet: 06.10.09
  2. Amin Negm-Awad

    Amin Negm-Awad Süsser Pfaffenapfel

    Dabei seit:
    01.03.07
    Beiträge:
    665
    a) -stringForKey: liefert dir was?

    b) Der Compiler hat sich nicht beschwert?
     
  3. iYassin

    iYassin Galloway Pepping

    Dabei seit:
    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.
     
  4. iYassin

    iYassin Galloway Pepping

    Dabei seit:
    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
     
  5. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.470
    Die lässt sich ohne Kenntnis Deines Codes auch nicht beantworten, denn der Fehler wird in Deinem Code liegen.

    MacApple
     
  6. Amin Negm-Awad

    Amin Negm-Awad Süsser Pfaffenapfel

    Dabei seit:
    01.03.07
    Beiträge:
    665
    a) -arrayWithArray: (NSMutableArray), -mutableArrayValueForKey: (NSKeyValueCoding)
    b) Warnungen sind Fehler.
     
  7. Poljpocket

    Poljpocket Salvatico di Campascio

    Dabei seit:
    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
     
  8. iYassin

    iYassin Galloway Pepping

    Dabei seit:
    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
     
  9. Amin Negm-Awad

    Amin Negm-Awad Süsser Pfaffenapfel

    Dabei seit:
    01.03.07
    Beiträge:
    665
    How-To

    Klingt plausibel. :)
     
  10. ifthenelse

    ifthenelse Fießers Erstling

    Dabei seit:
    07.12.06
    Beiträge:
    129
    Ich hätte aber noch eine Antwort auf eine nicht gestellte Frage:

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

Diese Seite empfehlen