Chiamare un metodo x aggiungere una riga alla tab dell'altra

di il
3 risposte

Chiamare un metodo x aggiungere una riga alla tab dell'altra

Ciao per fare comunicare 2 view sto usando un protocollo in pratica al click di un pulsante il protocollo dovrebbe chiamare un metodo e passare un valore all'altra view in modo che venga aggiunta una nuova riga nella TableView, il pulsante da solo funziona ma non chiama il metodo infatti non fa neanche il log eppure mi sembra che non manca niente

non so perchè questo protocollo non funziona non da errore pero non fa neanche il log
questo è il codice

.h della view dove c'è il pulsante
#import <UIKit/UIKit.h>
#import "InsertDelegate.h"

__weak id <InsertDelegate> _delegate;


@interface DownloadViewController : UIViewController<UITextViewDelegate, UITextFieldDelegate, UITableViewDataSource,UITableViewDelegate>


@property(nonatomic,weak) id <InsertDelegate> delegate;
@property (strong, nonatomic) UIWindow *window;

-(IBAction)startDownload:(id)sender;


@end
questo è il .m sempre della view con il pulsante
#import "DownloadViewController.h"
#import "MyBooxViewViewController.h"
#import "ViewController.h"
#import "XMLReader.h"
#import "InsertDelegate.h"

@interface DownloadViewController ()



@end

@implementation DownloadViewController

@synthesize delegate = _delegate;

//... altro codice funzionante

metodo chiamato al click del pulsante
-(IBAction)startDownload:(id)sender{

//... altro codice funzionante

//questa è la chiamata del metodo tramite protocollo che passa anche un parametro - un array
   [self.delegate insertNewFruit:titolo];
    
    MyBooxViewViewController *viewController4 = [[MyBooxViewViewController alloc]init];
    [self.navigationController pushViewController:viewController4 animated:YES];
}
questo è il protocollo si chiama InsertDelegate.h
#import <Foundation/Foundation.h>


@protocol InsertDelegate <NSObject>

-(void)insertNewFruit:(NSMutableArray *)argx;


@end
e questo è il codice della view dove sta la tabella e il metodo chiamato dal pulsante tramite il protocollo
#import "MyBooxViewViewController.h"
#import "ViewController.h"
#import "InsertDelegate.h"

@interface MyBooxViewViewController()

@end

@implementation MyBooxViewViewController


@synthesize tableView = _tableView;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
        CGRect tableViewFrame = [[UIScreen mainScreen] bounds];
        _tableView = [[UITableView alloc] initWithFrame:tableViewFrame style:UITableViewStylePlain];
        [_tableView setDelegate:self];
        [_tableView setDataSource:self];
        [self.view addSubview:_tableView];
        allMyBooks = [[NSMutableArray alloc] init];
        [allMyBooks addObject:@"codice-libero-free-as-in-"];
        self.view.backgroundColor = [UIColor yellowColor];
    }
    return self;
}
//altro codice funzionante

//questo è il metodo che viene chiamato tramite protocollo al click del pulsante - non fa neanche il log
- (void)insertNewFruit:(NSMutableArray *)argx
{
    

    NSLog(@"Nuovo frutto!");
   
     [allMyBooks addObject:@"codice"];
    [allMyBooks addObject:@"hacker"];
     [allMyBooks addObject:@"Hack_2.0"];
    [_tableView reloadData];
    
}


questo è il .h della view con la tabella
#import <UIKit/UIKit.h>
#import "InsertDelegate.h"

@interface MyBooxViewViewController :UIViewController <InsertDelegate, UITableViewDataSource,UITableViewDelegate>
{
    NSMutableArray *allMyBooks;
    
}

@property (strong, nonatomic) UITableView *tableView;
- (void)insertNewFruit:(NSMutableArray *)argx;

@end
non da errore ma non fa neanche il log non capisco perchè non funziona
grazie dell'aiuto

3 Risposte

  • Re: Chiamare un metodo x aggiungere una riga alla tab dell'altra

    Allora. Tu stai chiamando insertNewFruit: da self.delegate nel controller del bottone. Ma il Controller del bottone non ha nessun delegate. In realtà dal tuo codice si evince che il secondo controller, quello che vai a pushare, ha il delegato InsertDelegate. Di conseguenza dovresti fare cosi:
    
    -(IBAction)startDownload:(id)sender{
        //... altro codice funzionante
        //Prima istanzio il secondo controller, che nel suo costruttore si setta come delegato di se stesso
        MyBooxViewViewController *viewController4 = [[MyBooxViewViewController alloc]init];
        //Poi chiamo il metodo del delegato sull' istanza del secondo controller
       [viewController4.delegate insertNewFruit:titolo];
       //Infine pusho il controller
       [self.navigationController pushViewController:viewController4 animated:YES];
    }
    Non so se funziona. Prova un pò e fammi sapere

    Ovviamente nell' init del tuo MyBooxViewViewController (che nome O_o) devi chiamare un self.delegate = self;
  • Re: Chiamare un metodo x aggiungere una riga alla tab dell'altra

    Funziona!!! si ho un po di confusione con i delegati - urge corso
    Grazie tantissime e per un pezzo non rompo piu speriamo! ciao
  • Re: Chiamare un metodo x aggiungere una riga alla tab dell'altra

    Ma figurati

    buona serata
Devi accedere o registrarti per scrivere nel forum
3 risposte