I have defined this in code:
@property (nonatomic, weak) IBOutletCollection(UITableViewCell) NSSet * certaintyCells;
and synthesized. I made absolutely sure that this controller is used in story board, and connected three cells to this collection.
Next, in the didSelectRowAtIndexPath:
method call, I added this code, with NSLog added for debugging:
NSLog(@"Certainty Cells: %@",certaintyCells);
for (UITableViewCell * cell in certaintyCells) {
[cell.textLabel setTextColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:1]];
[cell setSelectionStyle:UITableViewCellSelectionStyleBlue];
}
The output is this:
Certainty Cells: (null)
And of course, behaviour expected does not happen.
Any ideas as to why this is happening? I did make sure that I am using static cells, and not dynamic prototypes. As a side note, these three cells are also connected to (working) IBOutlets of their own.
Thanks,
I found the answer by making changes that didn't make sense to me at the time. I changed the property from weak
to strong
, and it worked.
Why I had (weak) in the first place:
Because I didn't want to keep something from being deallocated if the view decided to unload due to memory warnings/etc.
Why this thinking was wrong:
Because an IBOutletCollection is an instance of NSSet or NSArray. that NSSet/NSArray isn't retained by the view, because it isn't itself a subview. With an IBOutlet a weak property is fine, with an IBOutletCollection a strong property is needed, otherwise the reference count is zero immediately and it is deallocated.
I'm leaving this here in hope that it helps somebody else.
I would say that (null) value is consequence of freeing object since ARC guessed that object is not referenced from anyone and sets value to nil plus deallocating it at some point.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With