Variablen nach modalViewController

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

  • Variablen nach modalViewController

    Liebe Leute!

    Ich habe mal eine Frage:
    In meiner iPad App habe ich eine UITableView, die mehrere Dateien darstellt.

    Jetzt kann man in den Edit Modus gehen und eine beliebige Anzahl von Zeilen auswählen, die dann einen Haken bekommen und in ein Array geschrieben werden.
    Dann öffnet sich ein MFMailComposeViewController (als modal) und man kann die gewählten Dateien per e-mail versenden.

    Jetzt möchte ich, dass, wenn die e-mail gesendet wurde oder abgebrochen wurde, dass die Haken wieder entfernt werden.
    Und dazu benötige ich das Array.

    Das Problem ist jetzt aber, dass das Array leer ist, wenn ich den modalViewController wieder dismisse.


    Wie kann ich also jetzt dafür sorgen, dass das Array erhalten bleibt?
    Muss ich es dazu an den modalViewController senden und dann wieder zurück wenn ich fertig bin?!?!


    Vielen Dank und liebe Grüße
    Julian
  • Ich denke auch du solltest dir noch einmal Gedanken über Speicherverwaltung und Properties machen. ;)

    Durch das zuweisen eines Wertes an eine iVar erhält das Objekt noch lange kein Retain,
    du kannst also nicht darauf bauen, das es länger lebt als bis zum Ende von viewDidLoad.

    Wäre currentRows eine strong property und du würdest das Array der iVar über den Setter zuweisen (self.currentRows = ... statt currentRows = ...), würde das anders aussehen.
  • Hey hey!
    Ich verwende ARC. (Vlllt. nicht richtig… Worauf muss ich achten?)

    Mit dem string property habe ich es gerade versucht. Bringt genau genommen garnichts.
    Wenn der viewController dimissed wird, ist die Variable wieder leer.

    Woran kann das denn bitte liegen?!
    So langsam komme ich mir echt ein bisschen veräppelt vor…
  • ARC ist auch kein allheilmittel gegen absolute Unkenntnis. Sorry aber lern doch erstmal ein wenig die Grundlagen. Es macht schon sinn zu wissen welchen Gültigkeitsbereich die variablen haben die du anlegst.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Top Tip, Claus!
    Aber wo findet man sowas am besten raus? Richtig. Im Forum.

    Foren sind ja nicht für Absolute Profis, die keine Hilfe mehr brauchen.
    Und was ich den Aussagen anderer Leute, die hier geantwortet haben, so folge, scheine ich ja kein Problem mit Gültigkeitsbereichen zu haben.

    Ich denke mal nicht, dass Du mit totaler Kenntnis auf die Welt gekommen bist.
    Was mir echt nicht hilft, sind Leute, die mir auf eine Frage antworten, dass ich das erst mal lernen muss. Wieso frage ich wohl?
  • Nein falsch.

    Das Forum ist dafür da um bei gezielten fragen Antworten zu erhalten.

    Das was du fragst sind Grundlagen die man sich anlesen kann und auch sollte. Dafür gibt es Bücher und Dokumentationen und ja ich habe auch mal angefangen. Aber da gab es noch nichtmal das Internet. Ich musste mir damals echte Bücher aus Amerika schicken lassen. Dagegen habt ihr es heute so einfach aber anscheinend ist selbst das bisschen selbstinitiative zu viel verlangt.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Danke, Thallius!
    Ich hatte eine "gezielte Frage" und habe keine Antwort erhalten. Ich bin derzeit noch dabei, das alles zu lernen. Das Beste, was man da machen kann, ist googlen. Google Du bitte mal solche Fragen. Dann wirst Du sicherlich feststellen, dass man fast nur Foren findet.
    Echt schade, dass ich in deutschsprachigen Foren scheinbar keine qualifizierte Hilfe erwarten kann. Und wenn Dich Leute wie ich stören, empfehle ich Dir einfach nicht zu antworten.

    Danke, uniique!
    Aber ich möchte ja keine Daten zwischen den viewControllern austauschen. Dann würde ich ja Delegates verwenden.

    Mein Problem ist ja, dass die Variable innerhalb des einen viewControllers "verfällt".
  • verstehe ich nicht, du übergibst doch das Array an den MailComposer der als ModalViewController dargestellt wird, dann übergib doch einfach das Array wieder zurück an den TableController, obwohl, eigentlich sollte das Array doch erst geleert werden wenn der TableController entfernt wird, am besten mal bissel Code dann können sich das die Leute die mehr verstehen als ich anschauen :)
    [window close]
  • Oh. Ich merke gerade, dass ich mich total missverständlich ausgedrückt habe...

    Also hier mal ein wenig code:

    Quellcode

    1. @interface mainViewController : UIViewController <UITableViewDelegate, UITableViewDataSource, MFMailComposeViewControllerDelegate> {
    2. NSMutableDictionary *currentStateImages
    3. }
    4. @property (strong) NSMutableArray *currentRows;

    Dann weiter:

    Quellcode

    1. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    2. {
    3. if (tableView.editing) {
    4. [self.currentRows addObject:(UIStringCell *)[tableView cellForRowAtIndexPath:indexPath]];
    5. [currentStateImages setObject:[tableView cellForRowAtIndexPath:indexPath].imageView.image forKey:[(UIStringCell *)[tableView cellForRowAtIndexPath:indexPath] passString]];
    6. [tableView cellForRowAtIndexPath:indexPath].imageView.image = [UIImage imageNamed:@"tick.png"];
    7. }
    8. }
    9. - (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
    10. {
    11. if (tableView.editing) {
    12. [tableView cellForRowAtIndexPath:indexPath].imageView.image = [currentStateImages objectForKey:[(UIStringCell *)[tableView cellForRowAtIndexPath:indexPath] passString]];
    13. [currentStateImages removeObjectForKey:[(UIStringCell *)[tableView cellForRowAtIndexPath:indexPath] passString]];
    14. [self.currentRows removeObject:(UIStringCell *)[tableView cellForRowAtIndexPath:indexPath]];
    15. }
    16. }
    17. - (IBAction)generateMail:(id)sender
    18. {
    19. mailController = [[MFMailComposeViewController alloc] init];
    20. [mailController setMailComposeDelegate:self];
    21. for (int i = 0; i < self.currentRows.count; i++) {
    22. NSString *docID = [(UIStringCell *)[self.currentRows objectAtIndex:i] passString];
    23. NSURL *docUrl = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.domain.de/date.php?docId=@%", docID]];
    24. NSData *docData = [NSData dataWithContentsOfURL:docUrl];
    25. [mailController addAttachmentData:docData mimeType:@"application/pdf" fileName:[NSString stringWithFormat:@"attachment %i.pdf", i]];
    26. }
    27. [self presentModalViewController:mailController animated:YES];
    28. }
    29. - (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
    30. {
    31. [controller setDelegate:nil];
    32. [self dismissModalViewControllerAnimated:YES];
    33. [self endEditing:nil];
    34. }
    35. - (IBAction)endEditing:(id)sender
    36. {
    37. for (int i = 0; i < self.currentRows.count; i++) {
    38. NSIndexPath *currID = [mainTableView indexPathForCell:[self.currentRows objectAtIndex:i]];
    39. [mainTableView deselectRowAtIndexPath:currID animated:YES];
    40. [mainTableView cellForRowAtIndexPath:currID].imageView.image = [currentStateImages objectForKey:[(UIStringCell *)[mainTableView cellForRowAtIndexPath:currIndex] passString]];
    41. }
    42. }
    Alles anzeigen

    Zur Erläuterung: UIStringCell ist eine custom class von UITableViewCell, die einen NSString (passString) enthält, um die docID aus einer transportieren zu können.
    Diese docID wird noch an mehreren anderen Stellen des Programms verwendet.

    Soweit funktioniert ja alles.
    Wenn ich jetzt zum Beispiel endEditng per UIButton aufrufe, anstatt die Mail zu erzeugen, werden alle Reihen unselected und die alten Bilder werden wiederhergestellt, so, wie ich mir das vorstelle.

    Nur, wenn der mailComposer einmal angezeigt wurde, ist self.currentRows scheinbar leer.


    Danke für eure Hilfe!