У меня была эта случайная проблема, возникающая между мной, пытающейся что-то работать и теперь .. Я даже попытался перезагрузить старый снимок, который я знаю, что 100% работает, и я просто не могу понять это дерьмо.Протоколы и делегаты не работают должным образом
basicly У меня есть класс и контроллер вида, класс пытается передать некоторые данные контроллеру вида, все в классе отлично работает, все данные готовы и ждут отправки к представлению контроллер с делегатами и протоколами, которые я установил, но когда я отлаживаю контроллер представления, он никогда не отображает метод протокола, который находится в контроллере представления, который я создал в классе. Я не знаю, если это простой баг, надзор или что-то, что мне не хватает в моем коде, я сейчас напишу свой код, надеюсь, кто-то еще увидит то, что мне не хватает.
Class.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;
//..
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]sendMan:filteredArray];
}
//..
Так вот мой класс, то в мою ViewController
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
делегатов традиционно слабы, _unsafe_unretained или назначать, не сильно. И возможно ли, что MyFilterArray не является alloc'd и init'd? – CodaFi
Я регистрирую, что отфильтрованный массив и его отображение правильного содержимого в нем .. но даже если бы это было так, не должен он все равно сделать это для моего диспетчера представлений и просто иметь нуль, представленный в этом методе ... –
Что происходит, когда вы регистрируетесь например: NSLog (@ "% @% @", [self SearchViewdelegate], filterArray); ?? Учитывая симптомы, которые вы описываете, я бы поставил свой [массив] –
danh