Swift - 尽管 objectId 准确无误,但仍未找到自定义对象
Swift - Custom object found nil even though objectId is accurate
let parent = path[row-1]
let child = path[row]
let indexOfChild = matrix[parent.objectId!]!.index(of: child)
print("indexOfChild = \(indexOfChild)")
print("keyValuePair = \(matrix[parent.objectId!]!)")
print("child = \(child)")
let indexAfter = matrix[parent.objectId!]!.index(after: indexOfChild!)
因此,我在控制台中打印了此信息。
如您所见,"child"(即带有 argumentText 的参数对象:"example")存在于 keyValuePair 中(它们具有相同的 objectId)。然而,它在 keyValuePair 中的索引在控制台中显示为 nil。显然,唯一的区别是:"child" 旁边有 "0x608000333f60",而 keyValuePair 中的第二个参数对象有 "0x600000321a40" .
我不知道这些的目的以及它们是如何计算的,但在我看来索引为零,因为这些代码彼此不同
我已经尝试修复它太久了。有人可以帮我解决吗?
indexOfChild = nil
keyValuePair = [<Argument: 0x608000334e60, objectId: IG9ekqMRw9, localId: (null)> {
ACL = "<PFACL: 0x60800042f200>";
argumentText = "the only thing is I can't get over how I feel when it ";
creatorId = hWRXoRvnYd;
level = 4;
parentId = j7GkpwUKsm;
reach = 0;
threadId = Dtq632QYJ2;
}, <Argument: 0x600000321a40, objectId: 56AsB1juNP, localId: (null)> {
ACL = "<PFACL: 0x600000235440>";
argumentText = "example ";
creatorId = hWRXoRvnYd;
level = 4;
parentId = j7GkpwUKsm;
reach = 0;
threadId = Dtq632QYJ2;
}]
child = <Argument: 0x608000333f60, objectId: 56AsB1juNP, localId: (null)> {
ACL = "<PFACL: 0x608000235540>";
argumentText = "example ";
creatorId = hWRXoRvnYd;
level = 4;
parentId = j7GkpwUKsm;
reach = 0;
threadId = Dtq632QYJ2;
}
fatal error: unexpectedly found nil while unwrapping an Optional value
0x608000333f60 和 0x600000321a40 值是相关变量的内存地址位置。由于地址位置不同,我相信这两个 child 实例被视为两个单独的值,可能不会匹配。这可能是您 运行 遇到的问题。
最好通过唯一 ID 值检查 child 实例的 parent,以便您可以匹配 parent 数组中的 child 实例正确。这有意义吗?
您可以通过以下方式找到 child 的索引:
var index = -1
var found = false
for chld in matrix[parent.objectId!]! {
index = index + 1
if chld.objectId == child.objectId {
found = true
break
}
}
if found {
// The index value at this point is the index for the child
}
您也可以简单地过滤 child 数组以在 parent 数组中找到与您的 child
变量具有相同 objectId 的 child,然后找到来自 child 数组的索引,像这样:
let chld = matrix[parent.objectId!]!.filter{ [=11=].objectId == child.objectId }.first
let indexOfChild = matrix[parent.objectId!]!.index(of: chld)
let parent = path[row-1]
let child = path[row]
let indexOfChild = matrix[parent.objectId!]!.index(of: child)
print("indexOfChild = \(indexOfChild)")
print("keyValuePair = \(matrix[parent.objectId!]!)")
print("child = \(child)")
let indexAfter = matrix[parent.objectId!]!.index(after: indexOfChild!)
因此,我在控制台中打印了此信息。
如您所见,"child"(即带有 argumentText 的参数对象:"example")存在于 keyValuePair 中(它们具有相同的 objectId)。然而,它在 keyValuePair 中的索引在控制台中显示为 nil。显然,唯一的区别是:"child" 旁边有 "0x608000333f60",而 keyValuePair 中的第二个参数对象有 "0x600000321a40" .
我不知道这些的目的以及它们是如何计算的,但在我看来索引为零,因为这些代码彼此不同
我已经尝试修复它太久了。有人可以帮我解决吗?
indexOfChild = nil
keyValuePair = [<Argument: 0x608000334e60, objectId: IG9ekqMRw9, localId: (null)> {
ACL = "<PFACL: 0x60800042f200>";
argumentText = "the only thing is I can't get over how I feel when it ";
creatorId = hWRXoRvnYd;
level = 4;
parentId = j7GkpwUKsm;
reach = 0;
threadId = Dtq632QYJ2;
}, <Argument: 0x600000321a40, objectId: 56AsB1juNP, localId: (null)> {
ACL = "<PFACL: 0x600000235440>";
argumentText = "example ";
creatorId = hWRXoRvnYd;
level = 4;
parentId = j7GkpwUKsm;
reach = 0;
threadId = Dtq632QYJ2;
}]
child = <Argument: 0x608000333f60, objectId: 56AsB1juNP, localId: (null)> {
ACL = "<PFACL: 0x608000235540>";
argumentText = "example ";
creatorId = hWRXoRvnYd;
level = 4;
parentId = j7GkpwUKsm;
reach = 0;
threadId = Dtq632QYJ2;
}
fatal error: unexpectedly found nil while unwrapping an Optional value
0x608000333f60 和 0x600000321a40 值是相关变量的内存地址位置。由于地址位置不同,我相信这两个 child 实例被视为两个单独的值,可能不会匹配。这可能是您 运行 遇到的问题。
最好通过唯一 ID 值检查 child 实例的 parent,以便您可以匹配 parent 数组中的 child 实例正确。这有意义吗?
您可以通过以下方式找到 child 的索引:
var index = -1
var found = false
for chld in matrix[parent.objectId!]! {
index = index + 1
if chld.objectId == child.objectId {
found = true
break
}
}
if found {
// The index value at this point is the index for the child
}
您也可以简单地过滤 child 数组以在 parent 数组中找到与您的 child
变量具有相同 objectId 的 child,然后找到来自 child 数组的索引,像这样:
let chld = matrix[parent.objectId!]!.filter{ [=11=].objectId == child.objectId }.first
let indexOfChild = matrix[parent.objectId!]!.index(of: chld)