struct in NSMutableArray

  • Original von salwa
    Original von Lucas de Vil
    Prinzipiell ist dein Ansatz schon richtig.
    Nur die Durchführung ist völlig verkehrt.

    a) Welche UserDefaults hättest du denn gern?
    (Schau mal in die Doku, gibt nicht viele, aber du musst sie angeben.)
    b) Was willst du als Parameter sichern?
    (NSMutableArray sicherlich nicht.)
    c) Wieso willst du ein Array deiner eigenen Objekte da reinwerfen?
    d) Welche anderen Möglichkeiten zum Sichern von Daten kennst du?

    Generell: 'Sinngemäß abgetippt und gekürzt' ist nicht 'das ist mein Code'.
    Alles, was nicht 'das ist mein Code' ist, ist es auch nicht wert überprüft zu werden. Schließlich weiß man nie, ob da nicht Fehler eingeflossen sind, die eigentlich gar nicht existieren.


    danke für die Anwort
    a) ach so, so etwas habe ich nicht gesehen, ich dachte NSUserDefaults ist immer gleich..??!!
    ich schaue nach..
    b)jaaaah doch . mein ziel ist: daten verschiedener Typen persistent zu speichern. z.B
    person{
    name, alter, adresse, datum
    }
    bis zu 1000 personen persistent speichern, so dass man die adresse oder datum von bestimmten Personen jeder zeit ändern kann. Und ganze am besten in einer Liste.
    c) ich habe die dieses Array aus dieser personen erstellt, aber nicht persistent und dafür war die NSUserDefaults gedacht.
    d) nicht viel, da ich aus anderem Programmierbereich komme. aber SQLite3 und NSUserDefaults aber nur kennen und nicht beherrschen. DB in java (mysql, sql,...schon alles gemacht) aber noch kein ObjC.

    >> sorry, ich habe eigentlich nicht damit gerechnet, dass jemand überhaupt antwortet

    :sick:


    Wenn du ne Frage in einem Forum stellst, musst du zwangsläufig damit rechnen, dass jemand antwortet ;)
  • Original von salwa
    Original von Amin Negm-Awad
    a) So kannst du das nicht eingegeben haben, weil das bereits in Zeile 2 eine Warning auslöst.

    b) Was funktioniert nicht? Funktioniert nicht heißt, dass du eine Erwartung hast und etwas anderes passiert.

    c) NSUserDefaults sollte eigentlich nur Immutables liefern.


    danke für die Antwort.

    a) nein, ich habe es einfach jetzt von hand angegeben und es doch zu verkürzen.

    Auch bei Verkürzungen empfiehlt es sich, dass mit C&P zu machen und dann hier zu reduzieren. Sollen wir raten, was ein Fehler in der Source ist, wenn sie von hier abweicht?

    Original von salwa
    b) fktioniert nicht ist keine beschreibung aber es ist viel zu viel um es zu beschreiben

    Das kann ich nicht beurteilen. Ohne Fehlerbeschreibung wird es aber ein Gerate & Gestochere.

    Original von salwa
    c) das ist ok so, aber was ich meine kann man NSUserDefaults überreden, damit es doch classObj speichert? z.B in NSData "capseln" aber es ist sooooo kompliziert.

    Woher weißt du so genau, ob der Fehler im Speichern oder im Laden liegt?
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • soviel ich weiss in NSUsersDefaults kann man kein classObj speichern und da genau ist der Fehler.

    was ich brache, ist keine fertige lösung oder syntax-korrektur sonst soll das ganze lieber lassen.. ein idee fehlt mir. zwei möglichkeiten habe ich:
    entweder raus zufinden wie man classObj persistent speichert
    oder NSUserDefaults lassen und eine andere struktur suchen.

    bitte entschuldigt die Ungeschicktheit.
    java->ObjC
  • Soweit ich weiß, kann man in NSUserDefaults so ziemlich alles speichern.
    Allerdings soll man nur die Dinge darin speichern, die die Anwendung betreffen. Im Allgemeinen auch 'Preferences' oder 'Einstellungen' genannt.

    Zunächst einmal machst du es also grundlegend falsch.
    Weiterhin erzählst du uns nicht, was genau nicht funktioniert.

    Schau mal in den Archives and Serializations Programming Guide for Cocoa
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Weiterhin erzählst du uns nicht, was genau nicht funktioniert.


    mein Code

    Quellcode

    1. #import "halloTestAppDelegate.h"
    2. #import "halloTestViewController.h"
    3. #import "Info.h"
    4. @implementation halloTestAppDelegate
    5. @synthesize window;
    6. @synthesize viewController;
    7. NSMutableArray *personList;
    8. @synthesize personInfo;
    9. -(Info*)initInfo
    10. {
    11. [self setPersonInfo:[[Info alloc]init]];
    12. personInfo = [self personInfo];
    13. if (personList == nil)
    14. {
    15. personList = [[NSMutableArray alloc] init];
    16. }
    17. [personInfo setName:@"willi"]; // track url
    18. [personInfo setMydate:[NSDate date]]; // webtrekk id(s)
    19. [personInfo setAdress:@"street"]; // content id(request)
    20. [personInfo setValid:YES];
    21. [personInfo setMyInt:7];
    22. return personInfo;
    23. }
    24. -(void)insert:(Info*)personInfos
    25. {
    26. [personList addObject:personInfos];
    27. [personList addObject:personInfos];
    28. [personList addObject:personInfos];
    29. [self saveData:personList :@"list"];
    30. }
    31. -(void)saveData:(NSMutableArray*)list:(NSString*)key{
    32. NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    33. [prefs setObject:list forKey:key];
    34. [prefs synchronize];
    35. }
    36. -(void)print{
    37. [self loadData];
    38. NSLog(@"count%i",[personList count]);
    39. for(int i=0; i<[personList count];i++){
    40. NSLog(@" eintrag %@", [personList objectAtIndex:i]);
    41. NSLog(@"hellooooooooooo");
    42. }
    43. }
    44. - (void)loadData{
    45. NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    46. personList = [prefs objectForKey:@"arrlist"];
    47. [prefs synchronize];
    48. }
    49. - (void)applicationDidFinishLaunching:(UIApplication *)application {
    50. [self initInfo];
    51. [self insert:personInfo];
    52. [self print];
    53. // Override point for customization after app launch
    54. [window addSubview:viewController.view];
    55. [window makeKeyAndVisible];
    56. }
    57. - (void)dealloc {
    58. [viewController release];
    59. [window release];
    60. [super dealloc];
    61. }
    62. @end
    Alles anzeigen


    Fehlermeldung:

    Quellcode

    1. 2010-03-09 15:28:06.805 halloTest[3463:207] *** -[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value '(
    2. <Info: 0x3b01db0>,
    3. <Info: 0x3b01db0>,
    4. <Info: 0x3b01db0>
    5. )' of class 'NSCFArray'.
    6. 2010-03-09 15:28:06.809 halloTest[3463:207] count0


    vielen Dank
    java->ObjC
  • Quellcode

    1. -(void)saveData:(NSMutableArray*)list:(NSString*)key{
    2. NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    3. [prefs setObject:list forKey:key];
    4. [prefs synchronize];
    5. }


    Hältst du diese Methode für sinnvoll?
    Gibtsn denn da keine Warnung oder sowas?
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Original von Lucas de Vil

    Quellcode

    1. -(void)saveData:(NSMutableArray*)list:(NSString*)key{
    2. NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    3. [prefs setObject:list forKey:key];
    4. [prefs synchronize];
    5. }


    Hältst du diese Methode für sinnvoll?
    Gibtsn denn da keine Warnung oder sowas?


    ich wollte alles so getrennt halten, so hätte man den übersicht.

    keine warnung alles ok.
    java->ObjC
  • Original von salwa
    Weiterhin erzählst du uns nicht, was genau nicht funktioniert.


    mein Code

    Quellcode

    1. #import "halloTestAppDelegate.h"
    2. #import "halloTestViewController.h"
    3. #import "Info.h"
    4. @implementation halloTestAppDelegate
    5. @synthesize window;
    6. @synthesize viewController;
    7. NSMutableArray *personList;
    8. @synthesize personInfo;
    9. -(Info*)initInfo
    Alles anzeigen

    Was hindert dich daran, einen Initialisierer zu verwenden und ihn ordnungsgemäß zu benennen?

    Quellcode

    1. {
    2. [self setPersonInfo:[[Info alloc]init]];

    Das ist ein Memory-Leak.

    Quellcode

    1. personInfo = [self personInfo];
    2. if (personList == nil)
    3. {
    4. personList = [[NSMutableArray alloc] init];
    5. }

    Das ist mutmaßlich ein Memory-Leak sein.

    Quellcode

    1. [personInfo setName:@"willi"]; // track url
    2. [personInfo setMydate:[NSDate date]]; // webtrekk id(s)
    3. [personInfo setAdress:@"street"]; // content id(request)
    4. [personInfo setValid:YES];
    5. [personInfo setMyInt:7];
    6. return personInfo;
    7. }

    Das ist der falsche Rückgabewert für eine Methode des Namens.

    Quellcode

    1. -(void)insert:(Info*)personInfos

    Die Benennung der Methode ist nicht KVC-konform.

    Quellcode

    1. {
    2. [personList addObject:personInfos];
    3. [personList addObject:personInfos];
    4. [personList addObject:personInfos];
    5. [self saveData:personList :@"list"];
    6. }

    Wieso speicherst du hier? Und wirklich drei Mal!?

    Quellcode

    1. -(void)saveData:(NSMutableArray*)list:(NSString*)key{

    Wieso ist der zweite Parameter nicht benannt?

    Quellcode

    1. NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    2. [prefs setObject:list forKey:key];
    3. [prefs synchronize];
    4. }

    Ist das -synchronize auf dem iPhone notwendig?

    Quellcode

    1. -(void)print{
    2. [self loadData];
    3. NSLog(@"count%i",[personList count]);
    4. for(int i=0; i<[personList count];i++){

    In Objective-C 2 existieren Enumerators

    Quellcode

    1. NSLog(@" eintrag %@", [personList objectAtIndex:i]);
    2. NSLog(@"hellooooooooooo");
    3. }
    4. }
    5. - (void)loadData{
    6. NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    7. personList = [prefs objectForKey:@"arrlist"];
    8. [prefs synchronize];
    9. }

    Synchronize? Dahinter?

    Quellcode

    1. - (void)applicationDidFinishLaunching:(UIApplication *)application {
    2. [self initInfo];
    3. [self insert:personInfo];
    4. [self print];
    5. // Override point for customization after app launch
    6. [window addSubview:viewController.view];
    7. [window makeKeyAndVisible];
    8. }
    9. - (void)dealloc {
    10. [viewController release];
    11. [window release];
    12. [super dealloc];
    13. }
    14. @end
    Alles anzeigen

    Original von salwa

    Fehlermeldung:

    Quellcode

    1. 2010-03-09 15:28:06.805 halloTest[3463:207] *** -[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value '(
    2. <Info: 0x3b01db0>,
    3. <Info: 0x3b01db0>,
    4. <Info: 0x3b01db0>
    5. )' of class 'NSCFArray'.
    6. 2010-03-09 15:28:06.809 halloTest[3463:207] count0


    vielen Dank

    Property-Lists funktionieren unmittelbar nur mit den Plist-Klassen. Steht in der Doku oder hier

    Ich hatte bereits erwähnt, dass diese Art des Lernens nichts bringt. Hast du keine Zeit, etwas ordentlich durchzuarbeiten?
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?