2015-06-14 4 views
1

У меня есть 2 VC, где пользователи записывают данные с помощью текстового поля или pickerview и основного экрана, где я показываю данные в виде таблицы. Проблема в том, что когда я нажимаю кнопку «Готово», она может вызывать делегата, но на первом vc, где она реализована, она не получает никакого вызова. Что мне делать? Я уже 2 дня пытаюсь найти ошибку, и ничего не происходит. Спасибо за любую помощь.Почему мой пользовательский протокол не звонит? Objective - C

2VC.h

@protocol AddCountryDelegate <NSObject> 

@required 

-(void)didCreateCountry:(CountryClass*)country; 

@end 

@interface AddCountryViewController : UIViewController 

@property (assign, nonatomic) id<AddCountryDelegate> customDelegate; 

2VC.m

- (IBAction)actionDone:(id)sender { 

    NSString* itemName = self.itemNameTextField.text; 
    NSString* countryName = self.countryNameTextField.text; 
    NSDate *countryDate = [datePickerView date]; 
    NSString *daysLeftString = [NSString stringWithFormat:@"%@ days", self.daysLeftTextField.text]; 

    NSInteger daysLeftInt = [daysLeftString integerValue]; 

    NSNumber *daysLeft = [NSNumber numberWithInteger:daysLeftInt]; 

    NSString *paymentMethod = self.paymentMethodTextField.text; 

    CountryClass* newCountryItem = 
    [[CountryClass alloc] initWithCountryName:countryName countryLogo:@"" itemName:itemName countryDate:countryDate daysLeft:daysLeft andPaymentMethod:paymentMethod]; 

    [self.customDelegate didCreateCountry:newCountryItem]; 

    [self dismissViewControllerAnimated:YES completion:nil]; 


} 

И, наконец, реализация на 1-й ВК:

-(void)didCreateCountry:(CountryClass *)country{ 

    //Add new country-itemCountry - UPDATING OUR MODEL DATA 

    NSMutableArray *mutableCountries = [self.countries mutableCopy]; 

    [mutableCountries addObject:country]; 

    self.countries = [mutableCountries copy]; 

    //UPDATING THE VIEW 

    [self.tableView reloadData]; 

    NSLog(@"Created"); 

    [self saveCountriesToDisc]; 

} 

-(void)saveCountriesToDisc{ 

    NSMutableArray* convertedCountries = [NSMutableArray array]; 

    //Converting the model to dictionary 

    for(CountryClass *country in self.countries) 
    { 
     NSDictionary *convertedCountry = [shop countriesToDictionary]; 
     [convertedCountries addObject:convertedCountry]; 
    } 

    //NOW convertedShows CONTAINS ONLY STRINGS, NUMBERS, 
    //ARRAYS AND DICTIONARY 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 

    NSString *documentsDirectory = paths.firstObject; 

    NSString *destinationPath = [documentsDirectory stringByAppendingPathComponent:@"countriesListData.plist"]; 

    //NOW TELL THE ARRAY TO SAVE 
    [convertedCountries writeToFile:destinationPath atomically:YES]; 

    NSLog(@"Saved"); 

    [self.tableView reloadData]; 

} 

Я инициализирует свой делегат на prepareforsegue

-(void)prepareForSegue:(UIStoryboardSegue *)segue 
       sender:(id)sender 
{ 


     if ([segue.identifier isEqualToString:@"AddSegue"]) { 

      AddCountryViewController* addCountryVC = 
      segue.destinationViewController; 
      addCountryVC.customDelegate = self; 

    } 
+0

где вы инициализацию делегат? Я думаю, ваш делегат равен нулю –

+0

Я думаю, что я инициализирую Segue: отредактировал главный вопрос. Разве это не способ? – Sergio

+0

Вызывается эта часть? –

ответ

0

Где в VC1 вы установили customDelegate на self?

также вы должны установить делегат weak не assign

+0

Я думаю, что я инициализирую Segue: отредактировал главный вопрос. Разве это не способ? О слабом назначении, который я читаю в Интернете, почти то же самое, и я пробовал с обоими, но ничего не происходит – Sergio

+0

Я изменил на слабые, чтобы попробовать, но все равно не работает. Нужно ли инициализировать делегат на 1-й вид просмотра или анизинга? – Sergio

+0

нет, что вы сделали, должен работать, 1-й VC.h у вас есть ? – ozd

Смежные вопросы