2013-05-05 5 views
-1

ОК Я пытаюсь создать простое приложение TableView, которое при выборе строки переходит к WebView. Я использую доски объявлений и правильно подключаю свои ссылки. Я получаю сообщение об ошибке, как показано ниже. Я слежу за учебниками Lynda.com, а также от appcoda.com, и оба используют методы, которые я пробовал ниже, используя «Руководство» или что-то вроде названия своего класса с NSObject. Я действительно озадачен и растерян, так как не могу понять, почему это не узнает. Я попытался удалить @property (неатомный, сильный) Guide * html; но все равно получите одно и то же сообщение. Надеюсь, это достаточно для вас. О, я использую последнюю версию xcode.Непризнанный селектор, отправленный экземпляру в Tableviewcontroller

Мое сообщение об ошибке

-[Guide isEqualToString:]: unrecognized selector sent to instance 0x8543aa0 
2013-05-05 11:33:29.076 hikingHelp[5522:c07] *** Terminating app due to uncaught exception NSInvalidArgumentException', reason: '-[Guide isEqualToString:]: unrecognized selector 
sent to instance 0x8543aa0' 
*** First throw call stack: 

Мой Guide.h файл ниже:

#import <Foundation/Foundation.h> 
#import "TableViewController.h" 
#import "DetailViewController.h" 
#import "MapViewController.h" 


@interface Guide : NSObject 

@property (nonatomic, strong) NSString *htmlListName; 
@property (nonatomic, strong) NSString *htmlFileName; 

@end 

Мой TableViewController.h:

#import <UIKit/UIKit.h> 
#import "Guide.h" 

@interface TableViewController : UITableViewController 
{ 
NSMutableArray *htmlFiles; 
} 
@property (nonatomic, strong) Guide *html; 
@end 

Мой TableViewController.m в - (void) viewDidLoad:

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 

htmlFiles = [[NSMutableArray alloc] init]; 

Guide *html = [[Guide alloc] init]; 
[html setHtmlListName:@"Survival Planning"]; 
[html setHtmlFileName:@"survivalplanning.html"]; 
[htmlFiles addObject:html]; 

html = [[Guide alloc] init]; 
[html setHtmlListName:@"Survival Kits"]; 
[html setHtmlFileName:@"survivalkits.html"]; 
[htmlFiles addObject:html]; 

html = [[Guide alloc] init]; 
[html setHtmlListName:@"Basic Survivl Medicine"]; 
[html setHtmlFileName:@"basichealth.html"]; 
[htmlFiles addObject:html]; 

html = [[Guide alloc] init]; 
[html setHtmlListName:@"Shelters"]; 
[html setHtmlFileName:@"shelters.html"]; 
[htmlFiles addObject:html]; 

html = [[Guide alloc] init]; 
[html setHtmlListName:@"Water Procurement"]; 
[html setHtmlFileName:@"waterprocurement.html"]; 
[htmlFiles addObject:html]; 

html = [[Guide alloc] init]; 
[html setHtmlListName:@"Firecraft"]; 
[html setHtmlFileName:@"firecraft.html"]; 
[htmlFiles addObject:html]; 

html = [[Guide alloc] init]; 
[html setHtmlListName:@"Food"]; 
[html setHtmlFileName:@"food.html"]; 
[htmlFiles addObject:html]; 

html = [[Guide alloc] init]; 
[html setHtmlListName:@"Edible Plants"]; 
[html setHtmlFileName:@"edibleplant.html"]; 
[htmlFiles addObject:html]; 

html = [[Guide alloc] init]; 
[html setHtmlListName:@"Posionous Plants"]; 
[html setHtmlFileName:@"posionousplants.html"]; 
[htmlFiles addObject:html]; 

html = [[Guide alloc] init]; 
[html setHtmlListName:@"Dangerous Animals"]; 
[html setHtmlFileName:@"dangerousanimals.html"]; 
[htmlFiles addObject:html]; 

html = [[Guide alloc] init]; 
[html setHtmlListName:@"Water Crossing"]; 
[html setHtmlFileName:@"watercrossings.html"]; 
[htmlFiles addObject:html]; 

html = [[Guide alloc] init]; 
[html setHtmlListName:@"Find Directions"]; 
[html setHtmlFileName:@"directions.html"]; 
[htmlFiles addObject:html]; 

html = [[Guide alloc] init]; 
[html setHtmlListName:@"Signaling Techniques"]; 
[html setHtmlFileName:@"signaling.html"]; 
[htmlFiles addObject:html]; 
+0

Где ваш код UITableView и вы проверяете 'isEqualToString' где угодно. – icodebuster

+2

Какая строка кода вызывает исключение? Ошибка в том, что вы не указали ошибку. – rmaddy

+2

* Вы даже за цикл bro? * Получите два NSArrays, один для htmlListName (NSStrings), а другой для htmlFileName. Прокрутите один из массивов и создайте экземпляр Guide, добавив его в массив каждый раз. –

ответ

0

Ошибка возникает из-за того, что вы извлекаете экземпляр Guide из массива, думая, что вы принимаете htmlFileName или htmlListName в своем методе -cellForRowAtIndexPath:.

Вместо использования cell.textLabel.text = [htmlFiles objectAtIndex:indexPath.row];, используйте следующее:

Guide *rowGuide = htmlFiles[indexPath.row]; 
cell.textLabel.text = rowGuide.htmlFileName; 

Кроме того, вместо того, чтобы вручную настройки экземпляра каждый из экземпляров поводыря в методе -viewDidLoad, вы можете использовать для цикла или альтернативно NSFastEnumeration:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    htmlFiles = [[NSMutableArray alloc] init]; 

    NSArray *htmlListNames = @[@"Survival Planning", @"Survival Kits", @"Basic Survivl Medicine", @"Shelters", @"Water Procurement", @"Firecraft", @"Food", @"Edible Plants", @"Poisonous Plants", @"Dangerous Animals", @"Water Crossing", @"Find Directions", @"Signalling Technique"]; 
    NSArray *htmlFileNames = @[@"survivalplanning.html", @"survivalkits.html", @"basichealth.html", @"shelters.html", @"waterprocurement.html", @"firecraft.html", @"food.html", @"edibleplant.html", @"posionousplants.html", @"dangerousanimals.html", @"watercrossings.html", @"directions.html", @"signaling.html"]; 

    for (NSUInteger idx = 0; idx < [htmlListNames count]; idx++) { 
     Guide *guide = [[Guide alloc] init]; 
     [guide setHtmlListName:htmlListNames[idx]]; 
     [guide setHtmlFileName:htmlFileNames[idx]]; 
     [htmlFiles addObject:guide]; 
     [guide release]; // if you're not using arc 
    } 
} 
+0

Большое спасибо! Также я собирался в Google, как настроить массив в цикле for, так что спасибо за то, что он тоже позаботился об этом! – kenthub

+0

@ kenthub никаких проблем, рад, что это сработало! –

0
-[Guide isEqualToString:] 

Руководство - это класс, который не является строкой, и как он может сравнивать класс со строкой.

+0

строка тоже класс ... у вас есть проблема правильно, но ваш ответ неверно сформулирован –

+1

Руководство - это подкласс NSObject, который вы можете [guideObj.htmlFileName isEqualToString: @ "Matchedstring"]; –

0

Вы вызываете метод isEqualToString:, который определяется по инстанциям NSString на пользовательском объекте типа Guide где

В классе Guide isEqualToString: вы получите сообщение об ошибке.

  • ЯВНО вы где-то по ошибке работать с гидом при условии, что это сильный
  • ИЛИ вы проходите какой-то метод (возможно от Tableview DataSource) руководство и обычно принимает строку,
Смежные вопросы