Objekt an UIAlertView übergeben

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

  • Objekt an UIAlertView übergeben

    Guten Abend liebe Community,

    als Neuling in Objective-C bin ich auf ein Problem gestoßen. Es geht darum das ich aus CoreData verschiedene Werte auslese unteranderem einen NSString. Diesen NSString möchte ich nun in einem UIAltertView als message setzen.
    Als PHP Veteran habe ich sofort an eine globale Variable gedacht, denke aber das dieses Problem doch Objekt orientierter zu lösen sein muss ;)

    Hier ein Schnipsel aus dem viewDidLoad:

    Quellcode

    1. TestClass *testVar = [[TestClass alloc] init];
    2. testVar.textVar = core_data.help; //Das eben instanzierte Objekt bekommt einen Wert aus Core-Data...


    Und dann der entsprechende UIAlertView:

    Quellcode

    1. - (void) displayAlert: (id) sender {
    2. if(testVar.textVar){
    3. UIAlertView *myAlert = [[UIAlertView alloc]
    4. initWithTitle: @"Hello World"
    5. message: testVar.textVar
    6. delegate: self
    7. cancelButtonTitle: nil
    8. otherButtonTitles: @"OK", nil];
    9. [myAlert show];
    10. }
    11. }
    Alles anzeigen


    Ich hoffe ihr könnt mir weiterhelfen.

    Viele Grüße aus Berlin,
    Mister-D
  • Wenn ich das so compilieren will bekomme ich den Error 'testVar' undeclared.
    Ich gehe davon aus das es daran liegt ich das Objekt ja im viewDidLoad erzeuge die AlertFunktion aber außerhalb des viewDidLoad liegt...
    Und Hut ab das sind hier ja fantastische Antwort-Zeiten ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Mister-D ()

  • Zu welcher Message?

    Mister-D schrieb:

    Und es hängt nicht irgendwie damit zusammen das der UIAlertView außerhalb des viewDidLoad liegt?

    Da du es als Instanzvariable angelegt hast sicherlich nicht.
    Ich hoffe, du nutzt beim Zugriff auf 'testVar' auch brav den Getter via 'self.testVar'.

    Andererseits sollte das Ganze ja schon bei if(testVar.textVar) meckern, nicht erst danach...
    Es ist sicherlich beides richtig und gleich geschrieben?
    Was sagt dann der Debugger, wenn du das UIAlertView einfach mal auskommentierst, worauf steht dann testVar.textVar in der if-Abfrage?
    «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
  • Mister-D schrieb:

    Und der Compiler sagt zu dieser Zeile:

    Quellcode

    1. message: testVar.textVar


    Quellcode

    1. 'testVar' undeclared

    In Deinem ViewController hast Du aber nur kein Attribut namens testVar. Die hast Du nur in der Klasse TestClass.

    Wenn ich Dir einen Tipp geben darf. Verwende sprechende Namen für Deine Klassen und Variablen, die möglichst beschreibend sind. Ich finde auch Redundanzen in Bezeichnern wie Var oder Class unnötig. Es geht ja darum, dass das verstanden von Dir und anderen wird, was Du da schreibst. Das gilt übrigens auch für Testprogramme. ;)
    „Meine Komplikation hatte eine Komplikation.“
  • Hallo Ihr beiden,

    danke für die Hilfe aber ich stehe nun komplett auf dem Schlauch.
    Ich habe das Problem mal in ein extra Projekt geschoben, damit es auch etwas verständlichere Klassen/Variablen Namen gibt ;)
    Hierzu habe ich eine neue Klasse Car angelegt.

    Car.h

    Quellcode

    1. @interface Car : NSObject {
    2. NSString *marke;
    3. }
    4. @property (copy) NSString *marke;
    5. @end


    Car.m

    Quellcode

    1. #import "Car.h"
    2. @implementation Car
    3. @synthesize marke;
    4. @end


    Das ganze landet dann in meinem ViewController wie folgt:
    InstanceVarViewController.h

    Quellcode

    1. #import <UIKit/UIKit.h>
    2. @interface InstanceVarViewController : UIViewController {
    3. }
    4. - (IBAction)pushButton:(id)sender;
    5. @end


    InstanceVarViewController.m

    Quellcode

    1. #import "InstanceVarViewController.h"
    2. #import "Car.h"
    3. @implementation InstanceVarViewController
    4. // Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
    5. - (void)viewDidLoad {
    6. [super viewDidLoad];
    7. Car *carMarke = [[Car alloc] init];
    8. carMarke = @"Audi";
    9. }
    10. - (IBAction)pushButton:(id)sender {
    11. NSLog(@"Die Marke lautet: %@",carMarke);
    12. }
    Alles anzeigen


    Der Error lautet nun in der IBAction:

    Quellcode

    1. 'carMarke' undeclared


    Ich bin mir sicher es ist ein absolut simpler Fehler, aber ich bekomme ihn nicht gefixt :(
  • Die Variable carMarke ist lokal in der Methode viewDidLoad. Darauf kannst Du nicht in pushButton: zugreifen.

    Du musst dafür ein Attribut im ViewController anlegen, am besten direkt als Property:

    Quellcode

    1. @class Car;
    2. @interface InstanceVarViewController : UIViewController {
    3. @private
    4. Car *carMarke;
    5. }
    6. @property (retain) Car *carMarke;
    und

    Quellcode

    1. @synthesize carMarke;
    2. - (void)dealloc {
    3. self.carMarke = nil;
    4. [super dealloc];
    5. }
    6. - (void)viewDidLoad {
    7. [super viewDidLoad];
    8. self.carMarke = [[Car alloc] init];
    9. }
    10. - (IBAction)pushButton:(id)sender {
    11. NSLog(@"Die Marke lautet: %@", self.carMarke);
    12. }
    Alles anzeigen


    Die Zuweisung eines Strings (@"Audi") an eine Variable vom Typ Carist übrigens Müll.

    Du solltest Dir zunächst einmal die Grundlagen reinpfeifen.
    „Meine Komplikation hatte eine Komplikation.“