无法将[UInt8]转换为String。错误:EXC_BAD_ACCESS

时间:2019-01-24 06:06:59

标签: ios swift string

我正在尝试将UInt8数组转换为字符串,但返回的结果为零。

func send(data: [UInt8]?) {
        if(data == nil || data?.count == 0) { return }
        let dataString = String(data: Data(bytes: data!, count: data!.count), encoding : String.Encoding.utf8)
        print("DataString: \(dataString ?? "J[]")")
        if(self.webSocket != nil) {
            self.webSocket!.send(text: dataString ?? "J[]" )
        }
    }

调用此函数时,其输入为

Optional<Array<UInt8>>
  ▿ some : 471 elements
    - 0 : 68
    - 1 : 31
    - 2 : 139
    - 3 : 8
    - 4 : 0
    - 5 : 0
    - 6 : 0
    - 7 : 0
    - 8 : 0
    - 9 : 0
    - 10 : 19
    - 11 : 117
    - 12 : 148
    - 13 : 201
    - 14 : 82
    - 15 : 228
    - 16 : 48
    - 17 : 12
    - 18 : 134
    - 19 : 223
    - 20 : 197
    - 21 : 103
    - 22 : 29
    - 23 : 108
    - 24 : 45
    - 25 : 142
    - 26 : 211
    - 27 : 199
    - 28 : 169
    - 29 : 225
    - 30 : 1
    - 31 : 88
    - 32 : 102
    - 33 : 46
    - 34 : 20
    - 35 : 135
    - 36 : 0
    - 37 : 125
    - 38 : 27
    - 39 : 104
    - 40 : 10
    - 41 : 194
    - 42 : 129
    - 43 : 162
    - 44 : 120
    - 45 : 119
    - 46 : 36
    - 47 : 47
    - 48 : 77
    - 49 : 22
    - 50 : 79
    - 51 : 37
    - 52 : 94
    - 53 : 218
    - 54 : 95
    - 55 : 44
    - 56 : 75
    - 57 : 191
    - 58 : 228
    - 59 : 190
    - 60 : 253
    - 61 : 116
    - 62 : 243
    - 63 : 155
    - 64 : 59
    - 65 : 4
    - 66 : 225
    - 67 : 68
    - 68 : 126
    - 69 : 148
    - 70 : 72
    - 71 : 41
    - 72 : 50
    - 73 : 184
    - 74 : 199
    - 75 : 105
    - 76 : 158
    - 77 : 220
    - 78 : 225
    - 79 : 211
    - 80 : 221
    - 81 : 127
    - 82 : 204
    - 83 : 71
    - 84 : 165
    - 85 : 183
    - 86 : 40
    - 87 : 2
    - 88 : 24
    - 89 : 34
    - 90 : 228
    - 91 : 17
    - 92 : 5
    - 93 : 136
    - 94 : 64
    - 95 : 16
    - 96 : 226
    - 97 : 8
    - 98 : 1
    - 99 : 61
    - 100 : 4
    - 101 : 47
    - 102 : 218
    - 103 : 16
    - 104 : 188
    - 105 : 62
    - 106 : 195
    - 107 : 96
    - 108 : 175
    - 109 : 7
    - 110 : 46
    - 111 : 63
    - 112 : 61
    - 113 : 36
    - 114 : 109
    - 115 : 33
    - 116 : 128
    - 117 : 62
    - 118 : 162
    - 119 : 179
    - 120 : 182
    - 121 : 26
    - 122 : 235
    - 123 : 24
    - 124 : 56
    - 125 : 26
    - 126 : 138
    - 127 : 11
    - 128 : 52
    - 129 : 54
    - 130 : 164
    - 131 : 7
    - 132 : 40
    - 133 : 178
    - 134 : 253
    - 135 : 212
    - 136 : 150
    - 137 : 106
    - 138 : 179
    - 139 : 30
    - 140 : 109
    - 141 : 143
    - 142 : 44
    - 143 : 64
    - 144 : 30
    - 145 : 163
    - 146 : 237
    - 147 : 193
    - 148 : 161
    - 149 : 135
    - 150 : 6
    - 151 : 155
    - 152 : 179
    - 153 : 223
    - 154 : 152
    - 155 : 195
    - 156 : 58
    - 157 : 227
    - 158 : 113
    - 159 : 225
    - 160 : 194
    - 161 : 112
    - 162 : 222
    - 163 : 147
    - 164 : 20
    - 165 : 137
    - 166 : 95
    - 167 : 32
    - 168 : 244
    - 169 : 141
    - 170 : 37
    - 171 : 85
    - 172 : 3
    - 173 : 194
    - 174 : 216
    - 175 : 119
    - 176 : 143
    - 177 : 36
    - 178 : 171
    - 179 : 162
    - 180 : 58
    - 181 : 108
    - 182 : 220
    - 183 : 64
    - 184 : 175
    - 185 : 1
    - 186 : 83
    - 187 : 4
    - 188 : 26
    - 189 : 118
    - 190 : 144
    - 191 : 33
    - 192 : 22
    - 193 : 89
    - 194 : 36
    - 195 : 171
    - 196 : 26
    - 197 : 117
    - 198 : 8
    - 199 : 88
    - 200 : 154
    - 201 : 87
    - 202 : 63
    - 203 : 124
    - 204 : 54
    - 205 : 175
    - 206 : 70
    - 207 : 147
    - 208 : 13
    - 209 : 172
    - 210 : 64
    - 211 : 213
    - 212 : 9
    - 213 : 62
    - 214 : 3
    - 215 : 66
    - 216 : 144
    - 217 : 102
    - 218 : 44
    - 219 : 7
    - 220 : 128
    - 221 : 155
    - 222 : 99
    - 223 : 23
    - 224 : 11
    - 225 : 26
    - 226 : 169
    - 227 : 70
    - 228 : 164
    - 229 : 186
    - 230 : 115
    - 231 : 202
    - 232 : 125
    - 233 : 209
    - 234 : 219
    - 235 : 150
    - 236 : 82
    - 237 : 102
    - 238 : 17
    - 239 : 36
    - 240 : 213
    - 241 : 143
    - 242 : 116
    - 243 : 98
    - 244 : 235
    - 245 : 163
    - 246 : 217
    - 247 : 95
    - 248 : 33
    - 249 : 201
    - 250 : 8
    - 251 : 219
    - 252 : 102
    - 253 : 82
    - 254 : 79
    - 255 : 200
    - 256 : 50
    - 257 : 198
    - 258 : 59
    - 259 : 225
    - 260 : 209
    - 261 : 142
    - 262 : 46
    - 263 : 112
    - 264 : 159
    - 265 : 21
    - 266 : 204
    - 267 : 177
    - 268 : 152
    - 269 : 26
    - 270 : 220
    - 271 : 79
    - 272 : 139
    - 273 : 161
    - 274 : 181
    - 275 : 194
    - 276 : 1
    - 277 : 34
    - 278 : 215
    - 279 : 202
    - 280 : 225
    - 281 : 85
    - 282 : 174
    - 283 : 216
    - 284 : 252
    - 285 : 23
    - 286 : 95
    - 287 : 29
    - 288 : 54
    - 289 : 74
    - 290 : 251
    - 291 : 180
    - 292 : 233
    - 293 : 129
    - 294 : 41
    - 295 : 51
    - 296 : 238
    - 297 : 177
    - 298 : 44
    - 299 : 51
    - 300 : 75
    - 301 : 118
    - 302 : 224
    - 303 : 199
    - 304 : 172
    - 305 : 214
    - 306 : 83
    - 307 : 54
    - 308 : 85
    - 309 : 74
    - 310 : 213
    - 311 : 244
    - 312 : 222
    - 313 : 196
    - 314 : 16
    - 315 : 48
    - 316 : 101
    - 317 : 136
    - 318 : 157
    - 319 : 248
    - 320 : 44
    - 321 : 2
    - 322 : 99
    - 323 : 212
    - 324 : 221
    - 325 : 168
    - 326 : 142
    - 327 : 24
    - 328 : 228
    - 329 : 46
    - 330 : 180
    - 331 : 242
    - 332 : 87
    - 333 : 56
    - 334 : 108
    - 335 : 148
    - 336 : 17
    - 337 : 104
    - 338 : 247
    - 339 : 102
    - 340 : 91
    - 341 : 122
    - 342 : 132
    - 343 : 103
    - 344 : 20
    - 345 : 124
    - 346 : 207
    - 347 : 151
    - 348 : 88
    - 349 : 33
    - 350 : 242
    - 351 : 57
    - 352 : 192
    - 353 : 96
    - 354 : 25
    - 355 : 104
    - 356 : 184
    - 357 : 132
    - 358 : 97
    - 359 : 10
    - 360 : 252
    - 361 : 136
    - 362 : 195
    - 363 : 160
    - 364 : 121
    - 365 : 211
    - 366 : 151
    - 367 : 83
    - 368 : 51
    - 369 : 205
    - 370 : 241
    - 371 : 191
    - 372 : 56
    - 373 : 174
    - 374 : 175
    - 375 : 15
    - 376 : 215
    - 377 : 146
    - 378 : 178
    - 379 : 62
    - 380 : 149
    - 381 : 227
    - 382 : 161
    - 383 : 123
    - 384 : 91
    - 385 : 98
    - 386 : 49
    - 387 : 184
    - 388 : 190
    - 389 : 14
    - 390 : 82
    - 391 : 9
    - 392 : 237
    - 393 : 8
    - 394 : 233
    - 395 : 181
    - 396 : 195
    - 397 : 124
    - 398 : 215
    - 399 : 145
    - 400 : 250
    - 401 : 117
    - 402 : 19
    - 403 : 169
    - 404 : 36
    - 405 : 241
    - 406 : 14
    - 407 : 220
    - 408 : 243
    - 409 : 244
    - 410 : 116
    - 411 : 116
    - 412 : 7
    - 413 : 247
    - 414 : 247
    - 415 : 52
    - 416 : 31
    - 417 : 95
    - 418 : 29
    - 419 : 184
    - 420 : 183
    - 421 : 121
    - 422 : 122
    - 423 : 157
    - 424 : 127
    - 425 : 233
    - 426 : 191
    - 427 : 154
    - 428 : 59
    - 429 : 248
    - 430 : 175
    - 431 : 51
    - 432 : 125
    - 433 : 127
    - 434 : 249
    - 435 : 119
    - 436 : 154
    - 437 : 30
    - 438 : 127
    - 439 : 159
    - 440 : 30
    - 441 : 222
    - 442 : 159
    - 443 : 142
    - 444 : 207
    - 445 : 179
    - 446 : 126
    - 447 : 54
    - 448 : 127
    - 449 : 188
    - 450 : 216
    - 451 : 250
    - 452 : 213
    - 453 : 197
    - 454 : 229
    - 455 : 159
    - 456 : 139
    - 457 : 235
    - 458 : 27
    - 459 : 247
    - 460 : 117
    - 461 : 247
    - 462 : 13
    - 463 : 251
    - 464 : 171
    - 465 : 44
    - 466 : 100
    - 467 : 39
    - 468 : 5
    - 469 : 0
    - 470 : 0

当此数据转换为字符串时,我得到dataStringnil。当我尝试调试时,发现了此日志

  

表达式产生错误:错误:执行被中断,原因:   EXC_BAD_ACCESS(代码= 2,地址= 0x16f174000)。该过程已经   返回到表达式评估之前的状态。

我的代码之前多次使用此方法,并且运行良好。

1 个答案:

答案 0 :(得分:1)

失败的原因很可能是数组中的\0个字节,并且数据似乎不是UTF8字符串。

这是一种更简单的语法。参数data是非可选的,因为调用此方法时,您想要发送数据。

if(self.webSocket != nil) { self.webSocket!...很漂亮 objective-c-ish 。在Swift中有Optional chanining

func send(data: [UInt8]) {
    guard !data.isEmpty, let dataString = String(data: Data(data), encoding: .utf8) else { return }
    print("DataString:", dataString)
    self.webSocket?.send(text: dataString)
}