2016-03-21 17 views
0

Ich versuche den Zielwert einer Aktion zu aktualisieren (HMCharacteristicWriteAction), aber es stürzt immer mit EXC_BAD_ACCESS ab (Code = 1, Adresse = 0x50).swift - HomeKit updateTargetValue von HMCharacteristicWriteAction stürzt ab

Mein Code-Schnipsel:

print("\(action) --> \(action.dynamicType)") // <HMCharacteristicWriteAction: 0x14cf7ba20> --> HMCharacteristicWriteAction 
print("current: \(action.targetValue)") // current: 1 
print("next: \(value) --> \(value.dynamicType)") // next: 0 --> Int 

action.updateTargetValue(value, completionHandler: { [weak self] error -> Void in 
     if let error = error { 
      // display some message 
      return 
     } 

     // do something else when succeeded 
}) 

Wie Sie sehen, action ist nicht gleich Null und der richtige Typ (HMCharacteristicWriteAction). Ich kann seine targetValue erfolgreich lesen.

Ich analysierte das Projekt mit Product - Analyze, alles ist in Ordnung (keine Warnungen). Ich habe auch Zombie in Scheme - Diagnostics aktiviert, aber immer noch kein Glück.


Nach updateTargetValue Dokumentation:

/*! 
* @brief This method is used to change target value for the characteristic. 
* 
* @param targetValue New target value for the characteristic. 
* 
* @param completion Block that is invoked once the request is processed. 
*     The NSError provides more information on the status of the request, error 
*     will be nil on success. 
*/ 
public func updateTargetValue(targetValue: NSCopying, completionHandler completion: (NSError?) -> Void) 

Was mich verwirrt ist targetValue: NSCopying. Ist der Typ Int von value "NSCopying" konform? Ich habe value as NSCopying für targetValue versucht, aber es ist nicht besser.

Könnten Sie mir bitte zeigen, wie Sie dieses Problem lösen können? Ist es in Ordnung, eine Int zu targetValue zu übergeben? Was könnte diesen Absturz verursachen?

Vielen Dank.

Antwort

0

Ein Int entspricht nicht NSCopying, verwenden Sie stattdessen eine NSNumber, die NSCopying entspricht.

Um eine Int NSNumber

[NSNumber numberWithInt:(int)]; 

oder

SWIFT 
    init(int value: Int32) 
OBJECTIVE-C 
- (NSNumber *)initWithInt:(int)value 
+0

hallo Maria, ich habe NSNumber versuchen verwenden zu konvertieren, aber die Dinge nicht verbessert. Mein Code ist 'let targetValue = NSNumber (integer: value)', dann 'actionSet.updateTargetValue (targetValue, ... '-> stürzt immer noch mit' EXC_BAD_ACCESS ab (code = 1, address = 0x50) '. – quanguyen