Fehlermeldung "unrecognized selector sent to instance"

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

  • Fehlermeldung "unrecognized selector sent to instance"

    Hallo liebes Entwicklerforum :)

    Ich bekomme eine Fehlermeldung, bei der es mir nicht ganz klar ist, woran ich gerade am scheitern bin.


    Ich will indem ich auf eine Zelle im Tableview klicke, einen neuen View öffnen. Dabei will ich dem View den Titelnamen in der Methode prepareForSegue: übergeben.
    Da ich dynamische Zellen verwende, ist der Name der Zelle ( welcher identisch sein sollten wie der Titel des zu öffnenden Views) in einem Array gespeichert.
    Den Titel des View setzte ich so:


    DetailView *dtv = segue.destinationViewController;

    dtv.title = [self.waren objectAtIndex:indexPath.row];


    Wenn ich das Programm jetzt jedoch ausführe, bekomme ich die Fehlermeldung:

    015-05-16 11:05:41.799 Post[16137:1095632] -[UITableViewCell row]: unrecognized selector sent to instance 0x7fcf10f54c20
    2015-05-16 11:05:41.802 Post[16137:1095632] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewCell row]: unrecognized selector sent to instance 0x7fcf10f54c20'
    *** First throw call stack:
    (
    0 CoreFoundation 0x0000000102842c65 __exceptionPreprocess + 165
    1 libobjc.A.dylib 0x000000010211fbb7 objc_exception_throw + 45
    2 CoreFoundation 0x000000010284a0ad -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
    3 CoreFoundation 0x00000001027a013c ___forwarding___ + 988
    4 CoreFoundation 0x000000010279fcd8 _CF_forwarding_prep_0 + 120
    5 Post 0x0000000101be7966 -[Produktseite prepareForSegue:sender:] + 278
    6 UIKit 0x000000010317910f -[UIStoryboardSegueTemplate _perform:] + 151
    7 UIKit 0x0000000102d2cd96 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 1242
    8 UIKit 0x0000000102d2cf0a -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 219
    9 UIKit 0x0000000102c5f62c _applyBlockToCFArrayCopiedToStack + 314
    10 UIKit 0x0000000102c5f4a6 _afterCACommitHandler + 533
    11 CoreFoundation 0x0000000102775ca7 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
    12 CoreFoundation 0x0000000102775c00 __CFRunLoopDoObservers + 368
    13 CoreFoundation 0x000000010276ba33 __CFRunLoopRun + 1123
    14 CoreFoundation 0x000000010276b366 CFRunLoopRunSpecific + 470
    15 GraphicsServices 0x0000000105d7ba3e GSEventRunModal + 161
    16 UIKit 0x0000000102c3b900 UIApplicationMain + 1282
    17 Post 0x0000000101be6bef main + 111
    18 libdyld.dylib 0x0000000104dfa145 start + 1
    )
    libc++abi.dylib: terminating with uncaught exception of type NSException

    Hatte jemand von euch vllt schon dieses Problem oder sieht jemand den Fehler, den ich am machen bin ?[b] ?( [/b]
    [b]Danke für die Hilfe schon im Vorraus :thumbup: [/b][/b]
  • Skofiar schrieb:

    kmr schrieb:

    Die Antwort steht in der Fehlermeldung:

    '-[UITableViewCell row]: unrecognized selector

    Du schickst ein "row" an eine UITableViewCell. An deren Stelle wäre ich auch pampig.
    Wie soll ich dann sonst auf den Namen im Array zugreifen ?Ich gebe ihm jaa mit "indexPath.row" den index an im Array, wo er den Titel rauslesen kann/soll.
    Paste hier mal die ganze Methode.
  • #import "Produktseite.h"
    #import "DetailView.h"


    - (void)viewDidLoad {
    [super viewDidLoad];
    [self befuellenDesArrays];

    }

    -(void)befuellenDesArrays {
    self.waren = @[ @"Red Bull", @"Coca Cola", @"Fanta", @"Jack Daniels", @"Wasser", @"Gift"];
    }

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Prototyp1"];
    if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Prototyp1"];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }
    cell.textLabel.text = [self.waren objectAtIndex:indexPath.row] ;
    return cell;
    }


    /*- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Prototyp1" forIndexPath:indexPath];

    return cell;
    }*/

    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    if (indexPath.section == 1) {
    [self performSegueWithIdentifier:@"detailSegue" sender:indexPath];
    }
    }


    #pragma mark - Navigation

    -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

    NSIndexPath *indexPath = sender;
    if ([segue.identifier isEqualToString:@"detailSegue"]) {
    DetailView *dtv = segue.destinationViewController;
    dtv.title = [self.waren objectAtIndex:indexPath.row];
    dtv.preisText.text = [self.preissliste objectForKey:[self.waren objectAtIndex:indexPath.row]];
    }
    return;

    }


    @end

    Das wäre dann der Code.
  • Skofiar schrieb:

    -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

    NSIndexPath *indexPath = sender;
    if ([segue.identifier isEqualToString:@"detailSegue"]) {
    DetailView *dtv = segue.destinationViewController;
    dtv.title = [self.waren objectAtIndex:indexPath.row];
    dtv.preisText.text = [self.preissliste objectForKey:[self.waren objectAtIndex:indexPath.row]];
    }
    return;

    }
    Der Parameter sender ist nicht der indexPath, sondern die Zelle, die angetippt wurde. Den indexPath bekommst du über die TableView:

    Quellcode

    1. NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
  • Skofiar schrieb:

    gritsch schrieb:

    wie wäre es mit CODE-tags?


    echt: wenn man möchte dass einem geholfen wird, sollte man minimalsten aufwand betreiben es den helfenden so einfach wie möglich zu machen!
    sorry ich weiss nicht was Code-tags sind....Ich bin mir das ein bisschen selber am beibringen mithilfe eines Buches und ein paar Internet-turtorials, deswegen wäre ich froh um ein bisschen Nachsicht :/
    Wird schon. Die Kollegen hier beißen nicht, die wollen nur spielen. ;) Schau mal in die Toolbar von dem Editor hier im Forum. Da kannst Du Code als solchen auszeichnen, was das lesen wesentlich angenehmer gestaltet.

    Quellcode

    1. 10 print "foobar"
    2. 20 goto 10
  • Michael schrieb:

    Skofiar schrieb:

    -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

    NSIndexPath *indexPath = sender;
    if ([segue.identifier isEqualToString:@"detailSegue"]) {
    DetailView *dtv = segue.destinationViewController;
    dtv.title = [self.waren objectAtIndex:indexPath.row];
    dtv.preisText.text = [self.preissliste objectForKey:[self.waren objectAtIndex:indexPath.row]];
    }
    return;

    }
    Der Parameter sender ist nicht der indexPath, sondern die Zelle, die angetippt wurde. Den indexPath bekommst du über die TableView:

    Quellcode

    1. NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
    besten Dank jetzt funktionierts!! :thumbup: :thumbup:


    Könntest du mir erklären warum ich auf den tableView verweisen muss und nicht direkt auf den Parameter sender zugreifen soll ?
  • kmr schrieb:

    Skofiar schrieb:

    gritsch schrieb:

    wie wäre es mit CODE-tags?


    echt: wenn man möchte dass einem geholfen wird, sollte man minimalsten aufwand betreiben es den helfenden so einfach wie möglich zu machen!
    sorry ich weiss nicht was Code-tags sind....Ich bin mir das ein bisschen selber am beibringen mithilfe eines Buches und ein paar Internet-turtorials, deswegen wäre ich froh um ein bisschen Nachsicht :/
    Wird schon. Die Kollegen hier beißen nicht, die wollen nur spielen. ;) Schau mal in die Toolbar von dem Editor hier im Forum. Da kannst Du Code als solchen auszeichnen, was das lesen wesentlich angenehmer gestaltet.

    Quellcode

    1. 10 print "foobar"
    2. 20 goto 10
    Danke werde ich in Zukunft berücksichtigen :D