Iphone 无法识别的选择器、委托问题

Iphone 无法识别的选择器、委托问题,iphone,ios,delegates,Iphone,Ios,Delegates,我得到了这个错误 [ResultViewController setSearchFields:IndexPath:]:发送到实例0xc448840的选择器无法识别 我有一个导航控制器堆栈,其中我使用代理将信息传递回导航堆栈中的前一个视图。。然而,我认为我在申报代表时犯了错误 我的导航堆栈如下所示 view 0 (mainmenu) -- view 1 (SearchViewController) --- view 2 (ResultViewController) - where I set th

我得到了这个错误

[ResultViewController setSearchFields:IndexPath:]:发送到实例0xc448840的选择器无法识别

我有一个导航控制器堆栈,其中我使用代理将信息传递回导航堆栈中的前一个视图。。然而,我认为我在申报代表时犯了错误

我的导航堆栈如下所示

view 0 (mainmenu)
-- view 1 (SearchViewController)
--- view 2 (ResultViewController) - where I set the delegate of the new view being loaded
---- View 3 (SubViewController) - this is where my delegates reside
我正在做的是弹出到view1并将代理信息传递到该视图,但是这样做会导致此错误。。。我想知道我是否必须在视图1中为视图3设置代理,在那里我最终传递了信息。。。对吗

如果是这样,在设置代理时我需要考虑什么?从视图1我该如何称呼它

这就是我在SubViewController中设置代理的方式

subvc.h

@protocol PassSubSearchData <NSObject>
@required
- (void) setSearchFields:(NSArray *)modArray IndexPath:(NSIndexPath *)modIndexPath;
@end

@interface VehicleSubResultViewController : UITableViewController <NSXMLParserDelegate> {
//..
 //Delegate for passing Mod and SubMod data back to VehicleSearchViewController
    id <PassSubSearchData> delegate;
//..
//Delegate for passing Mod and SubMod data back to VehicleSearchViewController
@property (strong) id delegate;
#import "SubViewController.h"

@interface SearchViewController : UITableViewController <PassSubSearchData> {
//..
然后在我的SearchViewController中,这就是我设置代理内容的方式

searchvc.h

@protocol PassSubSearchData <NSObject>
@required
- (void) setSearchFields:(NSArray *)modArray IndexPath:(NSIndexPath *)modIndexPath;
@end

@interface VehicleSubResultViewController : UITableViewController <NSXMLParserDelegate> {
//..
 //Delegate for passing Mod and SubMod data back to VehicleSearchViewController
    id <PassSubSearchData> delegate;
//..
//Delegate for passing Mod and SubMod data back to VehicleSearchViewController
@property (strong) id delegate;
#import "SubViewController.h"

@interface SearchViewController : UITableViewController <PassSubSearchData> {
//..

这就差不多概括了。。很抱歉耽搁了。

因此,据我所知,将信息存储到一个文件中,然后在需要时将其还原可能是实现您想要的更简单的方法。有些事情(我知道,过于简单化了)是这样的:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    //store the cell's title into a string
    NSString* string = [[[tableView cellForRowAtIndexPath:indexPath] textLabel] text];

    [[NSUserDefaults standardUserDefaults] setObject:string forKey:@"someKey"];
}
稍后,您可以使用以下命令取回该字符串:

NSString* titleString = [[NSUserDefaults standardUserDefaults] objectForKey:@"someKey"];
您可以以同样的方式处理需要传输的信息

另一种方法是在接收数据的视图控制器中创建属性:

@property(nonatomic, retain) NSString* string; //you need to synthesize it in the .m file too
然后,在弹出视图控制器之前,请执行以下操作:

//make sure you cast it
(SearchViewController*)[self.navigationController.viewControllers objectAtIndex:1].string = @"some string";
然后,一旦您转到该控制器,该属性将使用您在中设置的字符串进行设置

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

通过这些方法,您可以在视图控制器之间传递信息。祝你好运

因此,根据我所知,将信息存储到一个文件中,然后在需要时将其还原可能是一种更简单的方法来实现您想要的。有些事情(我知道,过于简单化了)是这样的:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    //store the cell's title into a string
    NSString* string = [[[tableView cellForRowAtIndexPath:indexPath] textLabel] text];

    [[NSUserDefaults standardUserDefaults] setObject:string forKey:@"someKey"];
}
稍后,您可以使用以下命令取回该字符串:

NSString* titleString = [[NSUserDefaults standardUserDefaults] objectForKey:@"someKey"];
您可以以同样的方式处理需要传输的信息

另一种方法是在接收数据的视图控制器中创建属性:

@property(nonatomic, retain) NSString* string; //you need to synthesize it in the .m file too
然后,在弹出视图控制器之前,请执行以下操作:

//make sure you cast it
(SearchViewController*)[self.navigationController.viewControllers objectAtIndex:1].string = @"some string";
然后,一旦您转到该控制器,该属性将使用您在中设置的字符串进行设置

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

通过这些方法,您可以在视图控制器之间传递信息。祝你好运

你能把有问题的方法声明和调用该方法的代码一起发布吗?我不太清楚你想做什么。您真正需要的唯一一件事是将数据从表视图传递到下一个视图控制器,如PopUp所说?如果您查看我拥有的导航堆栈,我希望将此委托从视图3传递到视图1。。但我认为这就是造成问题的原因,因为我可能在错误的地方或其他地方声明了代理?问题是,我的应用程序中有另一个代理,它可以从子视图传递到主视图。。但是复制所有这些代码,然后尝试从子视图传递到主视图,这会导致问题……但是为什么要尝试传递委托呢?你可能用了错误的方法。您在视图控制器1中使用代理中的哪些信息?只需将关键信息存储在
NSUserDefaults
(如有需要,请使用NSData)中,然后在下一个视图控制器中解包,可能会更简单。是的,我似乎有点迷路了。我之所以使用protocol and delegate组合,是因为我读过它的苹果公司更喜欢的做事方式。但是对于这个特殊的问题,我想从导航控制器中弹出视图3和视图2,并在视图1中调用委托方法。然而,它似乎引起了一些问题。。当我从一个视图传递到另一个视图时,我做得很好,但似乎无法让这个双重弹出操作正常工作……您可以发布带有所讨论方法声明的代码以及调用该方法的代码吗?我有点不清楚您想要做什么。您真正需要的唯一一件事是将数据从表视图传递到下一个视图控制器,如PopUp所说?如果您查看我拥有的导航堆栈,我希望将此委托从视图3传递到视图1。。但我认为这就是造成问题的原因,因为我可能在错误的地方或其他地方声明了代理?问题是,我的应用程序中有另一个代理,它可以从子视图传递到主视图。。但是复制所有这些代码,然后尝试从子视图传递到主视图,这会导致问题……但是为什么要尝试传递委托呢?你可能用了错误的方法。您在视图控制器1中使用代理中的哪些信息?只需将关键信息存储在
NSUserDefaults
(如有需要,请使用NSData)中,然后在下一个视图控制器中解包,可能会更简单。是的,我似乎有点迷路了。我之所以使用protocol and delegate组合,是因为我读过它的苹果公司更喜欢的做事方式。但是对于这个特殊的问题,我想从导航控制器中弹出视图3和视图2,并在视图1中调用委托方法。然而,它似乎引起了一些问题。。当我从一个视角切换到另一个视角时,我做得很好,但似乎无法让这个双重流行动作起作用……好吧,酷哥,谢谢你的帮助,我将尝试一下,做一些研究,看看我是怎么做的。谢谢你的回复。好的,帅哥,谢谢你的帮助。我将尝试一下,做一些研究,看看我的进展如何。谢谢你的回复。