gpt4 book ai didi

iphone - 协议(protocol)和委托(delegate)不能正常工作

转载 作者:可可西里 更新时间:2023-11-01 06:16:48 25 4
gpt4 key购买 nike

我在尝试处理某事和现在之间突然出现了这个随机问题。我什至尝试重新加载一个我知道 100% 正常工作的旧快照,但我无法解决这个问题。

基本上我有一个类和一个 View Controller ,该类试图将一些数据传递给 View Controller ,类中的所有内容都运行良好,所有数据都已准备好并等待发送给 View Controller 使用我设置的委托(delegate)和协议(protocol),但是当我调试 View Controller 时,它永远不会改变我在类中创建的 View Controller 中的协议(protocol)方法。我不知道这是一个简单的错误、疏忽还是我的代码中遗漏了什么,我现在将写下我的代码,希望其他人可以看到我遗漏了什么。

类.h

//This passes data back to the VehicleSearchViewController
@protocol SearchViewParsedData <NSObject>
- (void)sendManArray:(NSArray *)array;
- (void)sendModArray:(NSArray *)array;
@end
//..
id <SearchViewParsedData> SearchViewdelegate;
//..
//Delegates that will be acessed inside EngineRequests for passing the data mack to the viewcontroller
@property (strong) id <SearchViewParsedData> SearchViewdelegate;
//..

类.m

@synthesize SearchViewdelegate;
//..
//TODO: add if statments in this method so you can pass the data to the right methods and Views
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
if ([methodName isEqualToString:@"GetMan"]) {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K like %@",@"ISAMAN",@"T"];
NSArray *filteredArray = [parsedDataArrayOfDictionaries filteredArrayUsingPredicate:predicate];

NSLog(@"%@", filteredArray);
[[self SearchViewdelegate]sendMan:filteredArray];
}
//..

这就是我的类(class),然后在我的 View Controller 中结束

viewcontroller.h

#import "myClass.h"
//..
@interface MyVewController : UITableViewController <SearchViewParsedData> {
//..
MyClass *myClassResponse;
//..

viewcontroller.m

- (void)viewDidLoad
{
[super viewDidLoad];
//..
engineResponses = [[EngineResponses alloc] init];
[engineResponses setSearchViewdelegate:self];
//..
}


#pragma - EngineResponses Reciver methods
- (void)sendManArray:(NSArray *)array
{
MyFilterArray = array;
[self.tableView reloadData];
}

这让我有点发疯。我确信我拥有完美的一切,但它永远无法进入 viewcontroller.m -(void)sendManArray...如果有人有任何想法,我很乐意听到他们。

这是我添加那个nslog时生成的日志

NSLog(@"Checking filtered array %@ %@", [self SearchViewdelegate], filteredArray);

产生:

Checking filtered array (null) (
{
ISMAN = F;
ISVAR = T;
MAN = "BLAAA";
MANID = 3;
},
{
ISMAN = F;
ISVAR = F;
MAN = "BANG";
MANID = 3;
},
//etc

最佳答案

我认为您需要用以下代码替换Class.m 文件

@synthesize SearchViewdelegate;
//..
//TODO: add if statments in this method so you can pass the data to the right methods and Views
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
if ([methodName isEqualToString:@"GetMan"]) {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K like %@",@"ISAMAN",@"T"];
NSArray *filteredArray = [parsedDataArrayOfDictionaries filteredArrayUsingPredicate:predicate];

NSLog(@"%@", filteredArray);
[[self SearchViewdelegate]sendManArray:filteredArray];
}

//..

休息一切都是正确的,但我认为 sendMan 不可用(这是写在你的代码中)并且在 ViewController 中调用相同的方法

viewcontroller.m

- (void)sendManArray:(NSArray *)array 中替换为以下方法

 - (void)sendManArray:(NSArray *)array
{
NSLog(@"%@",array);
}

关于iphone - 协议(protocol)和委托(delegate)不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9936445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com