Reputation: 652
I'm using CoreData in my application and I have two entities: Building
and Phone
which are connected using one-to-many relation.
I need to set the number
property from the Phone
entity to my textView.text
field in the table view cell
.
I use the following code to achieve this (it's simplified for demonstration purposes):
let a = b.value(forKeyPath: "buildingPhones.number")
We can see from the output below that a
variable now hows values of two phone numbers:
Printing description of a:
▿ Optional<Any>
▿ some : 2 elements
- 0 : +7 7162 40 15 69
- 1 : +7 7162 25 75 39
How can I access the first number in this array - +7 7162 40 15 69
?
P.S. I'm pretty desperate now because I have tried litterely every found method, but still cannot do this. I have tried to access elements like in array, using object(at: 0)
method and many-many others. Moreover, when I try to cast a
to any type (String
or Array
or NSArray
or NSMutableArray
it alwats returns nil
.
What am I doing wrong?
Upvotes: 0
Views: 40
Reputation: 285079
You have to downcast the result of value(forKeyPath
to the actual type [String]
.
The save way to get the first number is
if let a = b.value(forKeyPath: "buildingPhones.number") as? [String],
let firstNumber = a.first {
print(firstNumber)
}
Be aware that the type of a one-to-many
relationship is (unordered) Set
. It's not guaranteed the the order of the array is always the same.
Upvotes: 1