NSValue und NSNumbers...

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

  • NSValue und NSNumbers...

    Dies ist wahrscheinlich eine Frage die hier die meisten innerhalb weniger Sekunden beantworten... Ich würd's aber trotzdem gerne wissen...
    Wenn ich folgendermaßen ein Objekt der Klasse NSValue erstelle...

    Quellcode

    1. NSValue *aValue = [NSNumber numberWithInt:3];


    Wie kann ich dann diesen Wert...
    • ...mit 2 addieren?
    • ...einer int-Variable zuweisen?
    • ...mit einer einem int-Wert überschreiben?
    Vielen Dank...
    Wer schreibt schon Signaturen... Ich brauch' keine Signatur...
  • Puddding schrieb:

    Quellcode

    1. NSValue *aValue = [NSNumber numberWithInt:3];

    Warum deklarierst Du eine NSValue Variable, wenn Du ein NSNumber Objekt erzeugst?

    Puddding schrieb:

    Wie kann ich dann diesen Wert...
    • ...mit 2 addieren?

    Quellcode

    1. NSNumber *aNumber = [NSNumber numberWithInt:3];
    2. aNumber = [NSNumber numberWithInt:[aNumber intValue] + 2];


    Puddding schrieb:

    • ...einer int-Variable zuweisen?

    Quellcode

    1. int x = [aNumber intValue];


    Puddding schrieb:

    • ...mit einer einem int-Wert überschreiben?

    Gar nicht. NSNumber ist nicht veränderbar.

    Michael

    Edit: Syntaxfehler korrigiert.

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

  • Nein, ich habe da ein neues NSNumber Objekt erzeugt und dies der Zeigervariablen aNumber zugewiesen. Der Zeiger auf das ursprüngliche NSNumber Objekt ist damit weg. Macht aber nichts, da es ja autoreleased ist.
    Dabei fällt mir auf, ich sollte so spät keinen Code tippen. Da ist ein derber Syntaxfehler drin. :sleeping:

    Michael
  • Ich versteh's irgendwie nicht... Ich brauche das ganze für ein Array... (Wieso kann man in Arrays keine Zahlen reinschreiben...das ist doch sinnlos!!! Mann benutzt Arrays doch extra um größere Mengen an Zahlen, und nicht Strings oder so, einfacher zu verwalten...)
    Also guck' ich bei Apple unter NSArray nach und seh' das...:
    developer.apple.com/library/ma…NSArray/arrayWithObjects:
    (Dritte Zeile im Codebeispiel...)
    Ich hab' mich auch erst gewundert wegen der Zuweisung, aber mir das dann damit erklärt das NSNumber eine Subklasse von NSValue ist und es funktioniert ja auch ohne auch nur eine Wahnung rauszuschmeißen, woran ich dann aber hängen geblieben bin, ist dass ein Objekt der Klasse NSValue natürlich nicht die Methoden der Subklasse NSNumber unterstützt, wodurch man dann garnicht mehr an die Zahl rankommt...offiziell, denn es funktioniert, gibt aber im Debugger 'ne Wahnung aus...
    Also ist das mit dem "NSValue *aValue = [NSNumber numberWithInt:3];" jetzt ok, oder nicht?
    Wie soll man einem Array jetzt einen Integer zuweisen... Apple will scheinbar das man erst den obenganannten Weg benutzt um eine Objekt der Klasse NSValue erstellt und dieses dann dem Array zuweist(, so findet man in der Dokumentation zu NSValue(developer.apple.com/library/ma…/Reference/Reference.html) auch unter dem Punkt "Overview" die zwei Sätze "It can hold any of the scalar types such as int, float, and char, as well as pointers, structures, and object ids. The purpose of this class is to allow items of such data types to be added to collections such as instances of NSArray and NSSet, which require their elements to be objects."), aber dann bekommt ja man wieder das Problem, dass man die Werte nicht mehr auslesen kann, denn ich bin mir mittlerweile sicher, dass es nicht falsch ist einem NSValue-Objekt ein NSNumber-Objekt zuzuweisen, denn sonst sollte es ja wenigstens im Debugger als Fehler oder Wahnung angezeigt werden, oder überseh' ich etwas grundlegendes?

    Da muss doch irgendwo ein Sinn zu erkennen sein...!
    Wer schreibt schon Signaturen... Ich brauch' keine Signatur...
  • du kannst nur objekte in ein NSArray oder NSSet reinpacken.

    um aus einem int oder float etc ein objekt zu bekommen packt man das ganze eben in eine NSNumber.
    du sollst nicht NSValue angeben sondern NSNumber dann gibt dir auch der compiler keine warnung!

    wenn du ints direkt in ein array packen willst dann musst du ein C-Array verwenden oder irgendeine stl-collection (c++)
  • Der Sinn eines Arrays, Sets und Ähnlichem ist es, unterschiedliche Objekte zu sammeln.
    Integer sind keine Objekte, deshalb musst du sie in Objekte werfen.
    Ja, NSNumber erbt von NSValue, deshalb geht die Zuweisung einer NSNumber an einen NSValue Zeiger.
    An die Werte von NSValue kommst du via -getValue ran.

    Vielleicht hilft dir auch NSDecimalNumber weiter:
    developer.apple.com/library/ma…icles/DecimalNumbers.html

    Deine letzten Fragen erscheinen mir sehr wirr. Was genau willst du wissen?
    «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
  • Puddding schrieb:

    Ich versteh's irgendwie nicht... Ich brauche das ganze für ein Array... (Wieso kann man in Arrays keine Zahlen reinschreiben...das ist doch sinnlos!!! Mann benutzt Arrays doch extra um größere Mengen an Zahlen, und nicht Strings oder so, einfacher zu verwalten...)
    Also guck' ich bei Apple unter NSArray nach und seh' das...:
    developer.apple.com/library/ma…NSArray/arrayWithObjects:
    (Dritte Zeile im Codebeispiel...)
    Ich hab' mich auch erst gewundert wegen der Zuweisung, aber mir das dann damit erklärt das NSNumber eine Subklasse von NSValue ist und es funktioniert ja auch ohne auch nur eine Wahnung rauszuschmeißen, woran ich dann aber hängen geblieben bin, ist dass ein Objekt der Klasse NSValue natürlich nicht die Methoden der Subklasse NSNumber unterstützt, wodurch man dann garnicht mehr an die Zahl rankommt...offiziell, denn es funktioniert, gibt aber im Debugger 'ne Wahnung aus...
    Also ist das mit dem "NSValue *aValue = [NSNumber numberWithInt:3];" jetzt ok, oder nicht?
    Wie soll man einem Array jetzt einen Integer zuweisen... Apple will scheinbar das man erst den obenganannten Weg benutzt um eine Objekt der Klasse NSValue erstellt und dieses dann dem Array zuweist(, so findet man in der Dokumentation zu NSValue(developer.apple.com/library/ma…/Reference/Reference.html) auch unter dem Punkt "Overview" die zwei Sätze "It can hold any of the scalar types such as int, float, and char, as well as pointers, structures, and object ids. The purpose of this class is to allow items of such data types to be added to collections such as instances of NSArray and NSSet, which require their elements to be objects."), aber dann bekommt ja man wieder das Problem, dass man die Werte nicht mehr auslesen kann, denn ich bin mir mittlerweile sicher, dass es nicht falsch ist einem NSValue-Objekt ein NSNumber-Objekt zuzuweisen, denn sonst sollte es ja wenigstens im Debugger als Fehler oder Wahnung angezeigt werden, oder überseh' ich etwas grundlegendes?

    Da muss doch irgendwo ein Sinn zu erkennen sein...!

    Du übersiehst einiges. Zum einen kannst du Zahlen in ein Array schreiben. Nämlich als INstanzen von NSNumber. Zum anderen kannst du keine Strings in Arrays schreiben, es sei denn, als Instanz von NSString.

    NSValue ist de Superklasse. Das ist nicht falsch, nur unsinnig.
    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"?
  • Puddding schrieb:

    Also NSNumber für Arrays? Wofür NSValue?

    NSNumber für Zahlen, NSValue für komplexere Werte.
    +++
    Live aus der Doku:

    NSValue:
    It can hold any of the scalar types such as int, float, and char, as well as pointers, structures, and object ids.

    NSNumber:
    NSNumber is a subclass of NSValue that offers a value as any C scalar (numeric) type. It defines a set of methods specifically for setting and accessing the value as a signed or unsigned char, short int, int, long int, long long int, float, or double or as a BOOL.
    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"?