0

我正在尝试更新操作 ( HMCharacteristicWriteAction) 的目标值,但它总是因 EXC_BAD_ACCESS (code=1, address=0x50) 而崩溃。

我的代码片段:

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
})

如您所见,actionis 不是 nil 并且类型正确 ( HMCharacteristicWriteAction)。我可以targetValue成功阅读它。

我使用 分析了项目Product - Analyze,一切正常(没有任何警告)。我也启用了 Zombie,Scheme - Diagnostics但仍然没有运气。


根据updateTargetValue文档:

/*!
 * @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) 

让我困惑的是targetValue: NSCopying。是否符合“NSCopying”的Int类型?value我确实尝试value as NSCopying过,targetValue但并没有更好。

你能告诉我如何解决这个问题吗?可以通过InttotargetValue吗?什么可能导致此崩溃?

谢谢你。

4

1 回答 1

0

Int 不符合 NSCopying,请改用符合 NSCopying 的 NSNumber。

要将 Int 转换为 NSNumber,请使用

[NSNumber numberWithInt:(int)];

或者

SWIFT
    init(int value: Int32)
OBJECTIVE-C
- (NSNumber *)initWithInt:(int)value
于 2016-03-22T17:47:31.900 回答