值不返回父视图控制器?

时间:2014-03-31 05:28:18

标签: ios iphone objective-c delegates

从我的父视图控制器我呈现模态视图控制器,从modalview用户可以选择他的国家,城市,纬度和经度等,并且值显示在下一步模态视图,如果用户在模态视图中单击完成按钮,我需要在进行一些计算后更新父视图控制器中的标签,但值不是更新我的标签,这里是代码,

//模态视图控制器中的done方法

- (IBAction)doneButtonClicked:(id)sender {
NSLog(@"Before Done %@ %@ %f %f %f %f",_finalCountryName,_finalCityName,_finalCityLatitude,_finalCityLongitude,_finalCityTimezone,_finalCityDaylight);

//opening screen is my parent view controller
OpeningScreen *open = [[OpeningScreen alloc]init];
[open rebackInitialisation];
[open manualSalatCalculation:_finalCityLatitude manLong:_finalCityLongitude manTz:_finalCityTimezone manDls:_finalCityDaylight];
[self dismissViewControllerAnimated:YES completion:nil];
}
父视图控制器(OpeningScreen)中的

//方法

-(void)manualSalatCalculation:(double)manLat manLong:(double)manLon manTz:(double)manTz manDls:(double)manDls {
NSLog(@"Manual Values are %f %f %f %f",manLat,manLon,manTz,manDls);   ========>>> Here values are coming

if (!manLat == 0.0 && !manLon == 0.0) {
    double tZone =0.0;
    if([curDayLightStatString isEqualToString:@"Disable"]) {
        tZone = manTz;
    }
    if([curDayLightStatString isEqualToString:@"Enable"]) {
        tZone = manTz + manDls;
    }

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]];
self.manualTimesArray = [prayCalc getPrayerTimes:components andLatitude:manLat andLongitude:manLon andtimeZone:tZone];
NSLog(@"manual calculated array values are %@",self.manualTimesArray); =======================>>> Here values are not coming so not updating my labels
first.text = [NSString stringWithFormat:@"%@",[self.manualTimes objectAtIndex:0]];
second.text = [NSString stringWithFormat:@"%@",[self.manualTimes objectAtIndex:2]];
third.text = [NSString stringWithFormat:@"%@",[self.manualTimes objectAtIndex:3]];
fourth.text = [NSString stringWithFormat:@"%@",[self.manualTimes objectAtIndex:5]];
fifth.text = [NSString stringWithFormat:@"%@",[self.manualTimes objectAtIndex:6]];
}
}

1 个答案:

答案 0 :(得分:0)

问题

  1. 您正在调用错误的OpeningScreen实例。 通过调用[[OpeningScreen alloc] init],您将创建一个与父视图控制器不同的新实例。

  2. 模态视图控制器和OpeningScreen类之间存在紧密耦合。

  3. 解决方案

    在模态视图控制器和它的父视图控制器之间进行通信的传统方法是使用“委托”设计模式。

    实现它时,您定义了父视图控制器必须实现的协议,即'CalculatorDelegate`,然后在创建模态视图控制器期间,您将父视图控制器作为弱视图提供给模态视图控制器。

    这样,子视图控制器不会创建OpeningScreen的新实例,甚至不需要知道它的存在。

    实施例

    请参阅this SO post