Otrzymuję UITableViewCell UIButton należący do słuszne:Pierwsze UITableViewCell z SuperView w iOS 7
-(void)buttonHandler:(UIButton *)button {
OrderCell *cell = [[button superview] superview];
NSLog(@"cell.item = %@", cell.item.text);
i działa dobrze w niczym przed iOS 7. Ale daje mi:
[UITableViewCellScrollView pozycja]: nierozpoznany selektor wysyłane do instancji 0x17ae2cf0
jeśli uruchomić aplikację w iOS 7. Ale jeśli zrobić:
-(void)buttonHandler:(UIButton *)button {
OrderCell *cell = [[[button superview] superview] superview];
NSLog(@"cell.item = %@", cell.item.text);
Następnie działa w systemie iOS 7, ale nie wcześniej?!?!?!
mam obejście problemu w ten sposób:
OrderCell *cell;
if([[[UIDevice currentDevice] systemVersion] isEqualToString:@"7.0"])
cell = [[[button superview] superview] superview];
else
cell = [[button superview] superview];
NSLog(@"cell.item = %@", cell.item.text);
ale WTF się dzieje !? Czy ktoś wie, dlaczego tak się dzieje?
Dzięki!
Twój kod został zależności od prywatnej struktury podrzędny z 'UITableViewCell '. Oczywiście struktura ta uległa zmianie w iOS 7. Istnieje wiele bezpieczniejszych sposobów robienia tego, co chcesz. Twój nowy kod zostanie złamany w systemie iOS 7.1 i iOS 8. – rmaddy
@rmaddy Jaka jest bezpieczniejsza metoda? – Mundi
Można iterować przez superviews, sprawdzając, czy są one typu klasy UITableViewCell, a następnie zwrócić ten widok? Zobacz odpowiedź: – CW0007007