Adressbuch als .plist

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Adressbuch als .plist

    Hallo,

    ich möchte Daten in einer .plist speichern - sagen wir, es wird ein Addressbuch. Nun brauche ich also folgende Eigenschaften:
    • Name
    • Alter
    • Tel Nr
    • Wohnort
    • Erreichbarkeit



    Nun stelle ich das an ? Ich habe zwar Tutorials gefunden, wo .plists bearbeitet wurden, aber dort wurden keine neuen Datensätze hinzugefügt oder entfernt sondern nur bereits vorhandenes bearbeitet.


    Danke! :)
    Auch Entwickler entwickeln sich !

    "Die Menschen, die verrückt genug sind zu denken, sie würden die Welt verändern, sind diejenigen, die es tun werden." - Steve Jobs
  • Ich war so frei und hab Deine Quellcode 1:1 mal eingefügt (natürlich Pfad getauscht und Keys/objects umbenannt), leider ist die Ausgabe immer:

    2013-06-01 22:55:20.323 PlistTutorial[72521:c07] (null)
    Auch Entwickler entwickeln sich !

    "Die Menschen, die verrückt genug sind zu denken, sie würden die Welt verändern, sind diejenigen, die es tun werden." - Steve Jobs
  • Da die plist im Documents Ordner liegt sollte das so reichen, oder?


    Quellcode

    1. NSDictionary *writeDict = @{ @"Name" : @"Max Mustermann", @"Alter" : @"32", @"Tel" : @"012354342523432" };
    2. [writeDict writeToFile:@"test.plist" atomically:YES];
    3. NSDictionary *readDict = [[NSDictionary alloc] initWithContentsOfFile:@"test.plist"];
    4. NSLog(@"%@", readDict);
    Auch Entwickler entwickeln sich !

    "Die Menschen, die verrückt genug sind zu denken, sie würden die Welt verändern, sind diejenigen, die es tun werden." - Steve Jobs
  • Ok, habe lang nichts mehr programmiert und mich damit auseinandergesetzt. Aber ich meine wenn du die plist hinzufügst, ist sie doch im mainBundle und daher nicht beschreibbar, oder ?
    Also schon der richtige Weg wie floschliep es andeutet. Einfach im Dokuments-Ordner die plist erzeugen und beschreiben.
  • Hallo,

    ist das wirklich so schwer?

    Das hat mich auch gerade beim Lesen wirklich schwer überrascht.
    Die Buben haben doch schon Sachen im Store…

    Da die plist im Documents Ordner liegt sollte das so reichen, oder?

    Du gibst doch gar kein Pfad an, sondern nur einen Dateinamen.
    Wie soll das funktionieren?

    Den Documents Folder bekommst du auf iOS unter:

    Quellcode

    1. [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]

    Ich sehe so etwas immer mehr im Internet. Seit wann machen wir das so? ;)
    Das ist natürlich "falsch", sondern den Pfad erhält man so:

    Quellcode

    1. // …
    2. NSArray *items = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
    3. NSUserDomainMask,
    4. YES);
    5. if([items count] < 1)
    6. {
    7. return nil;
    8. }
    9. // …
    10. NSString *path = [items objectAtIndex:0];
    11. // …
    12. NSLog(@"%@", path);
    13. // …
    Alles anzeigen


    Nun stelle ich das an ? Ich habe zwar Tutorials gefunden, wo .plists bearbeitet wurden, aber dort wurden keine neuen Datensätze hinzugefügt oder entfernt sondern nur bereits vorhandenes bearbeitet.


    Sieh unten für ein komplettes Beispiel, wie man Daten lesen, manipulieren und dann wieder schreiben kann.

    Viele Grüße

    Quellcode

    1. -(BOOL)myTestFileAction
    2. {
    3. // …
    4. NSString *path = [self myPathToFile];
    5. if([path length] < 1)
    6. {
    7. return NO;
    8. }
    9. // …
    10. NSMutableDictionary *info = [NSMutableDictionary dictionaryWithContentsOfFile:path];
    11. if(info == nil)
    12. {
    13. info = [NSMutableDictionary dictionary];
    14. }
    15. // …
    16. NSString *text = [[NSDate date] description];
    17. if([text length] < 1)
    18. {
    19. return NO;
    20. }
    21. // …
    22. [info setObject:text
    23. forKey:text];
    24. // …
    25. BOOL done = [info writeToFile:path
    26. atomically:YES];
    27. if(done == NO)
    28. {
    29. return NO;
    30. }
    31. // …
    32. return YES;
    33. // …
    34. }
    35. -(NSString*)myPathToFile
    36. {
    37. // …
    38. NSString *path = [self myDocumentDirectoryPath];
    39. if([path length] < 1)
    40. {
    41. return nil;
    42. }
    43. // …
    44. path = [path stringByAppendingPathComponent:@"info.plist"];
    45. // …
    46. return path;
    47. // …
    48. }
    49. -(NSString*)myDocumentDirectoryPath
    50. {
    51. // …
    52. NSArray *items = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
    53. NSUserDomainMask,
    54. YES);
    55. if([items count] < 1)
    56. {
    57. return nil;
    58. }
    59. // …
    60. NSString *path = [items objectAtIndex:0];
    61. // …
    62. return path;
    63. // …
    64. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von little_pixel () aus folgendem Grund: Plöhte Formatierung…

  • Hi,

    ok - danke mit dem richtigen Pfad funktioniert's nun. Nun frage ich mich aber ob .plist überhaupt das richtige dafür ist. Ich wollte CoreData und SQL aus dem Weg gehen, aber wie lässt sich ein Adressbuch in einer .plist gescheit abbilden?
    Auch Entwickler entwickeln sich !

    "Die Menschen, die verrückt genug sind zu denken, sie würden die Welt verändern, sind diejenigen, die es tun werden." - Steve Jobs
  • nitromethan schrieb:

    Hi,

    ok - danke mit dem richtigen Pfad funktioniert's nun. Nun frage ich mich aber ob .plist überhaupt das richtige dafür ist. Ich wollte CoreData und SQL aus dem Weg gehen, aber wie lässt sich ein Adressbuch in einer .plist gescheit abbilden?


    ja wirklich prickelnd ist eine plist nicht, gehen tuts aber schon (solange es nicht häufig änderungen gibt und nicht viele datensätze im adressbuch sind - denn es muss jedesmal di ekomplette datei geschrieben werden.
  • Hallo,

    Nun frage ich mich aber ob .plist überhaupt das richtige dafür ist. Ich wollte CoreData und SQL aus dem Weg gehen, aber wie lässt sich ein Adressbuch in einer .plist gescheit abbilden?


    Warum möchtest Du überhaupt die Daten sichern?
    Das ist doch unnötig redundant, da die doch schon im Adressbuch hinterlegt sind, auf das Du immer Zugriff hast.

    Es gibt praktisch jeden Tag eine Änderung. Also doch CoreData ? :/

    Das ist doch nicht schlimm. Du kannst doch ne Plist stündlich schreiben und das würde ich nicht mal als viel empfinden.
    Auch über die Datenmenge würde ich mir bei der Sache keine Gedanken machen. Hundert Eintäge sind unmerklich geschrieben und gelesen.

    Aber wie gesagt, warum doppelt machen!?

    Viele Grüße