UITableViewCell wird direkt wieder deselected

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Macoun 2019 - Frühbucherrabatt bis 26.7.2019

  • UITableViewCell wird direkt wieder deselected

    Moin,

    habe diesen Code, um eine Zelle in einem UITableView zu selektieren:

    Quellcode

    1. // Wählt die Wand aus, die markiert wurde
    2. if (index >= 0) {
    3. self tableView:self->liste didSelectRowAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0]];
    4. SABauteilListCell *cell = (SABauteilListCell *)[liste cellForRowAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0]];
    5. [cell setSelected:YES animated:YES];}



    Der Wert in 'index' steht stimmt auch. In meine Klasse wird auch folgende Standartmethode aufgerufen:

    Quellcode

    1. - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    2. [super setSelected:selected animated:animated];
    3. }



    Leider wird diese aus für mich unverständlichen Gründen danach noch mal mit 'selected = NO' aufgerufen...

    Jemand eine Idee?
    Man kann alles schaffen. Man muss es nur wollen ;)
    www.regetskcob.github.io
  • Mac & i Test Abo
  • Weils das genau so wenig funktioniert :D

    Es wird auch danach nochmals mit nem NO wieder "zurückgesetzt" und ich weiß nicht wo es her kommt... kann euch auch gerne mal den den CallStack vom zweiten unerwünschten Aufruf geben.

    Hier der Stack:

    Quellcode

    1. (lldb) bt
    2. * thread #1: tid = 0x1c03, 0x000ba6a7 Raumaufmass`-[SABauteilListCell setSelected:animated:](self=0x08de4890, _cmd=0x02d4ef3c, selected='\0', animated='\0') + 15 at SABauteilListCell.m:22, stop reason = breakpoint 4.1
    3. frame #0: 0x000ba6a7 Raumaufmass`-[SABauteilListCell setSelected:animated:](self=0x08de4890, _cmd=0x02d4ef3c, selected='\0', animated='\0') + 15 at SABauteilListCell.m:22
    4. frame #1: 0x0150d9a8 UIKit`-[UITableViewCell setSelected:] + 49
    5. frame #2: 0x013bd292 UIKit`-[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:] + 2092
    6. frame #3: 0x013bd3ce UIKit`-[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:] + 69
    7. frame #4: 0x013a8cbd UIKit`-[UITableView(_UITableViewPrivate) _updateVisibleCellsNow:] + 1350
    8. frame #5: 0x013b76f1 UIKit`-[UITableView layoutSubviews] + 242
    9. frame #6: 0x01360d42 UIKit`-[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 178
    10. frame #7: 0x025c4e42 CoreFoundation`-[NSObject performSelector:withObject:] + 66
    11. frame #8: 0x01221679 QuartzCore`-[CALayer layoutSublayers] + 266
    12. frame #9: 0x0122b579 QuartzCore`CA::Layer::layout_if_needed(CA::Transaction*) + 231
    13. frame #10: 0x011b04f7 QuartzCore`CA::Context::commit_transaction(CA::Transaction*) + 377
    14. frame #11: 0x011b23f6 QuartzCore`CA::Transaction::commit() + 374
    15. frame #12: 0x011b1ad0 QuartzCore`CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) + 80
    16. frame #13: 0x0259799e CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 30
    17. frame #14: 0x0252e640 CoreFoundation`__CFRunLoopDoObservers + 384
    18. frame #15: 0x024fa4c6 CoreFoundation`__CFRunLoopRun + 1174
    19. frame #16: 0x024f9d84 CoreFoundation`CFRunLoopRunSpecific + 212
    20. frame #17: 0x024f9c9b CoreFoundation`CFRunLoopRunInMode + 123
    21. frame #18: 0x02f187d8 GraphicsServices`GSEventRunModal + 190
    22. frame #19: 0x02f1888a GraphicsServices`GSEventRun + 103
    23. frame #20: 0x01322626 UIKit`UIApplicationMain + 1163
    24. frame #21: 0x0000a5b2 Raumaufmass`main(argc=1, argv=0xbffff300) + 94 at main.mm:17
    Alles anzeigen


    Quellcode

    1. - (void)selectBauteilInList:(char *)cGUID
    2. {
    3. isSelectedByIrrlicht = YES;
    4. NSString *GUID = [NSString stringWithCString:cGUID encoding:NSWindowsCP1252StringEncoding];
    5. int index = [self getPositionOfBauteilByGUID:GUID];
    6. self->bauteilID = [NSString stringWithFormat:@"%@", GUID];
    7. // Wählt die Wand aus, die markiert wurde
    8. if (index >= 0) {
    9. NSIndexPath *path = [NSIndexPath indexPathForRow:index inSection:0];
    10. [self->liste selectRowAtIndexPath:path animated:YES scrollPosition:UITableViewScrollPositionNone];
    11. [[SARAM objectForKey:RAMContextMenuViewKey] selectedBauteilWithID:cGUID];
    12. }
    13. }
    Alles anzeigen
    Man kann alles schaffen. Man muss es nur wollen ;)
    www.regetskcob.github.io

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von DBocksteger ()

  • macmoonshine schrieb:

    Wie wäre es mit einem kleinen Beispielprojekt?
    Da es sich um ein Firmenprojekt handelt, welches sehr umfangreich ist, kann ich dir das nicht mal eben so zerhacken und geben ;)

    MCDan schrieb:

    Wann wird selectBauteilInList: im Programmablauf denn genau aufgerufen. Evtl. bevor dem viewWillAppear: des TableViewControllers?
    Es wurde richtig aufgerufen. nur noch ein zweites mal auf der UITableView heraus ohne dass ich es ausgelöst habe.... Ich habe nun einen NSTimer mit nem Interval von 0.0 verwendet und jetzt geht es....
    Man kann alles schaffen. Man muss es nur wollen ;)
    www.regetskcob.github.io
  • DanielBocksteger95 schrieb:

    Es wurde richtig aufgerufen. nur noch ein zweites mal auf der UITableView heraus ohne dass ich es ausgelöst habe.... Ich habe nun einen NSTimer mit nem Interval von 0.0 verwendet und jetzt geht es....


    Und so eine Pfusch findest du gut und wirst auch noch dafür bezahlt?

    Absolut unglaublich

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • DanielBocksteger95 schrieb:

    macmoonshine schrieb:

    Wie wäre es mit einem kleinen Beispielprojekt?
    Da es sich um ein Firmenprojekt handelt, welches sehr umfangreich ist, kann ich dir das nicht mal eben so zerhacken und geben ;)

    Du könntest auch einfach ein neues Projekt erstellen, das die wesentlichen Teile enthält. Wenn Dir das aber zu viel Arbeit ist, dann such weiter. Außerdem geht es nicht darum, es mir zur Verfügung zu stellen sondern dem Forum.
    „Meine Komplikation hatte eine Komplikation.“
  • DanielBocksteger95 schrieb:

    MCDan schrieb:

    Wann wird selectBauteilInList: im Programmablauf denn genau aufgerufen. Evtl. bevor dem viewWillAppear: des TableViewControllers?
    Es wurde richtig aufgerufen. nur noch ein zweites mal auf der UITableView heraus ohne dass ich es ausgelöst habe.... Ich habe nun einen NSTimer mit nem Interval von 0.0 verwendet und jetzt geht es....

    Wenn es "richtig aufgerufen" wurde, was auch immer dies bedeuten soll, dann sollte es nicht zwei mal aufgerufen werden, oder?

    Und warum wird selectBauteilInList: vom UITableView aufgerufen? Wie soll dies funktionieren?
  • Thallius schrieb:

    DanielBocksteger95 schrieb:

    Es wurde richtig aufgerufen. nur noch ein zweites mal auf der UITableView heraus ohne dass ich es ausgelöst habe.... Ich habe nun einen NSTimer mit nem Interval von 0.0 verwendet und jetzt geht es....


    Und so eine Pfusch findest du gut und wirst auch noch dafür bezahlt?

    Absolut unglaublich

    Claus
    1. Finde ich nicht gut. Nein.
    2. Ich bin Azubi

    PS: Solche Behauptungen/Unterstellungen von sich zu lassen finde ich aber noch schlimmer ;)

    @macmoonshine, um euch zeigen zu können, was ich bezwecken möchte, müsste icha ber die gesamte Oberfläche der App zur Verfügung stellen, welche mit der Irrlicht-Engine entwickelt wurde und das wäre deutlich zu viel ;)

    @MCDan & All... Es hat sich heraus gestellt, dass der Aufruf aus einer Klasse von einem anderen Mitarbeiter kam, Xcode allerdings das TableView selber als "Aufrufer" der Methode ingestellt hat.
    PS: Es wurde ja nicht selectBauteilInList sonder setSelected in der UITableViewCell-Subclass aufgerufen.
    Man kann alles schaffen. Man muss es nur wollen ;)
    www.regetskcob.github.io