Vergleichen Sie NSNumber mit NSInteger
Ich verbrachte einige Zeit heute jagt zwei bugs, und am Ende fixieren Sie beide mit der gleichen Lösung.
Nun, ich habe die Lösung, ich war in der Hoffnung, Klarheit zu erhalten dahinter.
Ich Vergleiche ein Attribut von Core Data (Integer 16/NSNumber) mit einer ganzen Zahl (ABPropertyID & ABMultiValueIdentifier).
War der Fehler in diesem Vergleich, und seltsam genug, nur zeigten sich, nachdem ich getötet hatte, die app (aus dem hintergrund-Fach), wiedereröffnet, und führen Sie durch den gleichen Prozess der Vergleich. Anyways...
Dies ist, was aufgehört hat zu arbeiten, nach einem Neustart:
if (myNumber.aProperty == [NSNUmber numberWithInt:anInteger]) { /* do stuff here */}
Und dies sind die beiden Lösungen, die so weit entfernt sind, perfekt zu funktionieren:
if ([myNumber.aProperty integerValue] == anInteger) {/* do stuff here */}
if ([myNumber.aProperty isEqualToNumber:[NSNumber numberWithInt:anInteger]]) { /* do stuff here */}
Mir, dass Sie alle identisch Aussehen. Ich bin immer entweder die Umwandlung der NSNumber eine integerValue, oder die Umwandlung der integer in ein NSNumber.
Irgendwelche Ideen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht verwenden
==
zu vergleichenNSNumber
s. Die meisten der Zeit, vergleichen Sie zwei unterschiedliche Objekte, so ist der Vergleich nicht zu true ausgewertet werden. Wenn Sie sich Ihre if-Bedingung, merken, dass Sie sich vor allem verglichen Ihre Immobilie zu einem brand newNSNumber
Objekt.Seit
NSInteger
ist eine Cocoa-wrapper für bestimmte Wert-Typen, VergleichNSInteger
s mit==
funktioniert einwandfrei.Die Umsetzung der
isEqualToNumber:
wahrscheinlich nimmt die verpackte Werttypen und vergleicht Sie auch.Als Sie sagte, beide Lösungen arbeiten...
Ich würde lieber das erste, wie es scheint, noch lesbar, IMHO...
Es kann auch nicht mehr so performant, wie Sie bei einem Vergleich zahlen, nachdem er konvertiert ein NSNumber zu einer int.
In die zweite, die Sie konvertieren eines int in ein Objekt, dann vergleichen Sie die beiden Objekte...
Das ist also eine zweite Methode aufrufen, die Sie nicht haben-im ersten Fall...
Hoffe, das hilft... : )
netWorkingButtonsIndexes
ist das array enthält Objekte undLinkedIn
ist eine Zahl mitint
Daten geben.Mithilfe der
isEqual
Methode, die wir vergleichen können Objekte mit beliebigen Daten rtype.