NSArray data pass trough

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

  • NSArray data pass trough

    Abbend,

    angenommen ich habe Controller A und Controller B.
    In B lege ich ein NSMutableArray C mit Property (nonatomic, retain) an. In B.m führe ich ein Synthesize aus.
    In A und B werden natürlich die Imports der jeweiligen Klassen gemacht.
    In A.m im Lifecyle ViewDidLoad mache ich eine Instanz von B und greife über die Punktnotation auf das NSMutableArray.
    Nun versuche ich mit "addObjectsFromArray" oder initWithArray, den NSMutableArray C mit einem vorhandenen Array D zu füllen.

    Er gibt mir mit NSLOG am Ende von ViewDidLoad immer NULL aus!
    NSLOG bei Array D bringt positive Ergebnisse.
    Auch ein Set in Controller B im ViewWillAppear hat nichts gebracht. ( hat zwar kein Einfluss, weil NSLOG im Controller A aufgerufen wurde, aber trotzdem probiert )

    Wieso füllt er mein Array nicht?
    lernen, lernen, lernen :)
  • Man kann das so nicht nachvollziehen. Etwas Code wäre gut. Aber schon jetzt:

    1. Du willst keine Property mit dem Typen NSMutableArray.
    2. Du hast hoffentlich in den Headern kein #import auf die jeweils andere Klasse.
    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"?
  • Quellcode

    1. DetailsViewController *detailView = [[DetailsViewController alloc]initWithNibName:@"DetailsViewController" bundle:nil];
    2. [detailView.arrayForMessages initWithArray:[jsonArray copy]];
    3. NSLog(@"a: %i", detailView.arrayForMessages.count);


    Ich habe es auch mit addObjectsFromArray: probiert.



    1. Darf mein kein Property für den Typen NSMutableArray machen?
    2. Mit importieren der Klasse mein ich #import "Controller.h"
    lernen, lernen, lernen :)
  • Ich glaub jetzt weiß ich was du meintest mit wollen und dürfen = (
    NSMutableArray und propertys ist irgendwie keine gute Kombination.
    Data Pass through mit nsmuteablearray und property verhält sich total beschissen ....

    NSString ist doch auch so einfach zu übertragen...

    Wäre fast praktischer, wenn ich NSmuteableArray global außerhalb der Klasse deklariere...
    lernen, lernen, lernen :)
  • Ich verstehe dein konkretes Problem immer noch nicht. Daher war das eine allgemeine Anmerkung.
    NSString verhält sich wie NSArray. NSMutableString wäre wie NSMutableArray – und ich würde dir auch dringend davon abraten.
    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"?
  • Tut mir Leid für die unpräzise Fragestellung. Im Prinzip möchte ich ein NSArray / NSMuteableArray in Klasse A befüllen und in Klasse B mit den Daten weiterarbeiten. Mit NSString klappt das ganz gut. Mit dem Array krieg ich es nicht hin...Immer NULL.

    Also: Wie kann ich am besten ein Array über zwei Controller transportieren?
    lernen, lernen, lernen :)
  • ja das befüllen von arrayForMessages in der A Klasse hat schon funktioniert, aber in der Klasse B ist arrayForMessages wieder NULL wieso? Wenn ich das mit NSString mache, dann bleibt der Wert, den ich vorher in A eingefügt habe...
    lernen, lernen, lernen :)
  • 1. Lies bitte die Doku zu KVC. Auch wenn du kein KVO einsetzt, ist das herausgeben eines Mutables (gleich ob Mutable-String, Mutable-Set, Mutable-Array, Mutable-WasWeißIchContainer) ein Fehler. Es verstößt gegen das Prinzip der Kapselung, weil ein Nutzer eine Änderung ohne Mithilfe des Empfängers vornehmen kann.

    2. Du typisierst daher deine Property bitte auf NSArray. Kein Aber. Du! typisierst! deine! Property! auf! NSArray! Sonst versohle ich dir den Hintern, wenn du meine Nummer wählst (3,99 €/min). Und wenn du darauf stehen solltest, mache ich es nicht.

    3. Ab hier hast du drei Möglichkeiten:

    3.1. Du machst das zu einer normalen Property, wie du es auch bei NSString gemacht hat. Dann lautet dein Code:
    destination.arrayProperty = source.property

    3.2. Du machst es zu einer readonly-Property und benutzt eine der KVC-Methoden für To-Manys. Die musst du dann implementieren.

    3.3. Du machst beides und schreibst deinen Setter selbst, der auf den übergebenen Parameter ein mutableCopy ausführt.

    4. WICHTG: Du liest das nächste Mal ein Buch, welches dir Objective-C richtig erklärt und nicht nur 10 Kochrezepte für 10 Probleme beinhaltet. Das Ergebnis davon ist nämlich, dass du beim 11 Problem nur noch Scheiße codest.
    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"?
  • Danke für die harten, aber wahren Worte^^ Wurde bereits auf NSArray geändert. Ich bevorzuge 3.1.
    DroneDeveloper hat den Source hingeschrieben, den ich einsetze.

    " don't hit me " trotzdem gibt er im Zielcontroller NULL aus ...

    ich glaub ich geh jetzt ein Buch lesen xDDD
    lernen, lernen, lernen :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von imoney91 ()

  • Mach halt ein neues Projekt und reduzier Dein Problem auf <100 Zeilen, in dem Du genau das, was nicht geht, nochmal schreibst. Quasi ein Test-Fall. Du kannst ja sogar alles in eine Datei packen. Wenn Du dabei nicht schon selbst auf die Lösung kommst (wie es mir immer geht), kannst Du den Code hier zeigen und es fällt allen andern ungemein leichter, Dir zu helfen (und Deinen schlechten Stil zu kritisieren :D )
    C++
  • Diesen Teil kannst du ersetzen . . .

    Quellcode

    1. for (int i = 0; i<originArray.count; i++)
    2. {
    3. NSLog(@"originArray Ausgabe: %@", [originArray objectAtIndex:i]);
    4. }
    5. // MIT
    6. NSLog(@"originArray Ausgabe: %@", originArray);


    Eventuelle weitere Bemerkungen zu deinem Beispiel überlasse ich den Profis.
  • Danke für den Tipp ramo.
    Ich hab jetzt 1 Stunde lang versucht, den Fehler zu finden.......
    Der Code in meinem Projekt ist 1 zu 1 wie im hochgeladenen Beispielcode und ich weiß nicht WIESO das blöde Ding den Wert nicht übernimmt...
    Das es geht beweist mein Beispielprojekt. Ich habe mal mit dem Debugger versucht nachzuvollziehen, wo der Wert wieder auf NULL gesetzt werden könnte. ICH habe keine Ahnung -.-

    Der Wert im Array ist solange gültig, bis ich einen pushtoNavigationcontroller ... mache. Ab da ist der Wert des Arrays immer NULL. Egal ob ViewDidLoad oder in einer IBaction....Es ist immer NULL und ich weiß nicht wieso...Habe im gleichen Projekt parallel mehrere Arrays probiert. Keines dieser Arrays wird transportiert -.- Kann mir jemand einen Hinweis geben? Ich weiß nicht mehr wo ich suchen und den Debugger einschalten soll ...
    lernen, lernen, lernen :)
  • Wir müssten schon den Code sehen, der nicht funktioniert. Das funktionierende Beispielprojekt nützt da wenig. Ich vermute ja, dass Du mit zwei verschiedenen Instanzen hantierst, aber ob das tatsächlich so ist und wie die dann zustande kommen kann man ohne den fehlerhaften Code zu kennen eben nicht sagen.

    Michael
  • Morgen,

    Ich habe jetzt mal nur die fehlerhaften .h und .m Dateien hochgeladen, ich hoffe es ist nachvollziehbar.

    In DetailsViewController lege ich die NSArray Property an
    und NewsViewController befüllt diese.

    Vielleicht könnt ihr mir nur einen kleinen Hinweis geben, damit ich weiß wo ich suchen kann.

    Gruß
    lernen, lernen, lernen :)