2013-05-05 41 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 2013-05-05 16:48:06

+2

哪行代码导致异常?您发布的任何代码都不会导致错误。 – rmaddy 2013-05-05 16:48:21

+2

*你甚至为循环兄弟?*获取两个NSArrays,一个用于htmlListName(NSStrings),另一个用于htmlFileName。循环访问其中一个数组,并创建一个Guide实例,并将其每次添加到该数组中。 – 2013-05-05 16:53:28

回答

0

错误因为您正在从数组中检索Guide实例,因为您在-cellForRowAtIndexPath:方法中正在接收htmlFileNamehtmlListName

而不是使用cell.textLabel.text = [htmlFiles objectAtIndex:indexPath.row];的,使用以下命令:

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

而且,而非手动设置你的-viewDidLoad方法实例每个指南情况下,你可以使用一个for循环或交替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

非常感谢!此外,我要谷歌如何在for循环中设置数组,所以谢谢你的照顾! – kenthub 2013-05-10 18:42:46

+0

@ kenthub没有问题,很高兴它的工作! – 2013-05-11 01:13:03

0
-[Guide isEqualToString:] 

指南是一个类,它不是一个字符串,所以它如何将一个类与一个字符串进行比较。

+0

一个字符串也是一个类...你得到的问题正确,但你的答案没有公式化正确 – 2013-05-05 18:01:11

+1

指南是NSObject的子类你可以[guideObj.htmlFileName isEqualToString:@“Matchedstring”]; – 2013-05-05 18:09:55

0

要调用其上的NSString实例定义Guide类型的自定义对象的地方

由于类指南isEqualToString的方法isEqualToString::你得到一个错误。

  • 无论是你的地方错误地指导工作,假设它是一个强大的
  • 或传递某种方法(也许从的tableView数据源)的指南,它通常假定一个字符串
相关问题