UITableViewCell indexPath Absturz in iOS7
Habe ich eine UITableViewCell
im UITableViewController
.
In meiner Zelle ist eine Schaltfläche, wenn Sie klicken, gelangen Sie zu einem anderen view
mit einem prepareforsegue
.
In prepareForSegue
ich dies tun:
if ([[segue identifier] isEqualToString:@"MySegue"])
{
UITableViewCell *cell = (UITableViewCell*) [[sender superview] superview];
UITableView *table = (UITableView*)[[[sender superview] superview] superview];
NSIndexPath *indexPath = [table indexPathForCell:cell];
}
Ok! Alles hat immer gut geklappt. Aber jetzt, ich habe ein Upgrade von xCode mit iOS7, wenn ich auf den button, der sich in der Zelle ein Fehler stellt sich mir, und ich weiß nicht, wie es zu lösen:
[UITableViewCell indexPathForCell:]: unrecognized selector sent to instance 0x9e160b0
2013-09-20 16:30:44.427 MyApp[8212:a0b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewCell indexPathForCell:]: unrecognized selector sent to instance 0x9e160b0'
*** First throw call stack:
(
0 CoreFoundation 0x024475e4 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x01a5d8b6 objc_exception_throw + 44
2 CoreFoundation 0x024e4903 -[NSObject(NSObject) doesNotRecognizeSelector:] + 275
3 CoreFoundation 0x0243790b ___forwarding___ + 1019
4 CoreFoundation 0x024374ee _CF_forwarding_prep_0 + 14
5 MyApp 0x0004bc01 -[NewsTableViewController prepareForSegue:sender:] + 3441
6 UIKit 0x00af69cc -[UIStoryboardSegueTemplate _perform:] + 156
7 UIKit 0x00af6a59 -[UIStoryboardSegueTemplate perform:] + 115
8 libobjc.A.dylib 0x01a6f874 -[NSObject performSelector:withObject:withObject:] + 77
9 UIKit 0x005c4c8c -[UIApplication sendAction:to:from:forEvent:] + 108
10 UIKit 0x005c4c18 -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 61
11 UIKit 0x006bc6d9 -[UIControl sendAction:to:forEvent:] + 66
12 UIKit 0x006bca9c -[UIControl _sendActionsForEvents:withEvent:] + 577
13 UIKit 0x006bbd4b -[UIControl touchesEnded:withEvent:] + 641
14 UIKit 0x00936d7f _UIGestureRecognizerUpdate + 7166
15 UIKit 0x00601d4a -[UIWindow _sendGesturesForEvent:] + 1291
16 UIKit 0x00602c6a -[UIWindow sendEvent:] + 1030
17 UIKit 0x005d6a36 -[UIApplication sendEvent:] + 242
18 UIKit 0x005c0d9f _UIApplicationHandleEventQueue + 11421
19 CoreFoundation 0x023d08af __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
20 CoreFoundation 0x023d023b __CFRunLoopDoSources0 + 235
21 CoreFoundation 0x023ed30e __CFRunLoopRun + 910
22 CoreFoundation 0x023ecb33 CFRunLoopRunSpecific + 467
23 CoreFoundation 0x023ec94b CFRunLoopRunInMode + 123
24 GraphicsServices 0x032c89d7 GSEventRunModal + 192
25 GraphicsServices 0x032c87fe GSEventRun + 104
26 UIKit 0x005c394b UIApplicationMain + 1225
27 MyApp 0x00002cfb main + 235
28 libdyld.dylib 0x01f42725 start + 0
29 ??? 0x00000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
Der Zeile, wo die app abstürzt, ist dies:
NSIndexPath *indexPath = [table indexPathForCell:cell]; }
Du musst angemeldet sein, um einen Kommentar abzugeben.
In iOS7
UITableViewWrapperView
ist der superview derUITableViewCell
, das heißt noch superview für Sie:iOS7:
iOS6"
Anderen ändern, können Sie finden es hier:
scheint Ihr code: UITableView Tabelle = (UITableView)[[[sender superview] superview] superview]; liefert eine
UITableViewCell
keinUITableView
.Versuchen Sie unter:
Apple ändern Sie die UITableViewCell Hierarchie in iOS 7
Mit iOS 6.1 SDK
Mit iOS 7 SDK
Also, wenn Sie wollen zu bekommen indexpath auf die Schaltfläche index dann verwenden Sie folgenden code, Mit iOS 6 oder höher SDK
Mit iOS 7 oder 7+ SDK
Es funktioniert sicher, aber wie die super-können wir bekommen?
Ich hatte ähnliches problem, wo ich feststellen musste das textFileds Wert von TableView
Und Util
Dies ist besser
Dies ist der beste Weg, denke ich:
CGPoint subviewPosition = [sender convertPoint:CGPointZero toView:selbst.myTable];
NSIndexPath* indexPath = [self.myTable indexPathForRowAtPoint:subviewPosition];
Können Sie einfach die index-Pfad hier. Werden Sie iOS7 oder iOS6, wird es wieder die richtige index-Pfad