Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 删除控制器(B)中的表行时,如何更新控制器(a)中的标签?_Ios_Delegates - Fatal编程技术网

Ios 删除控制器(B)中的表行时,如何更新控制器(a)中的标签?

Ios 删除控制器(B)中的表行时,如何更新控制器(a)中的标签?,ios,delegates,Ios,Delegates,我有一个视图控制器(a),带有一个显示某些事务余额的标签。在视图控制器中,我有一个容器视图,其中包含一个表视图控制器(B) 当我更改视图控制器(使用选项卡栏)时,平衡会更新,但我希望这样做,以便在控制器B中删除一行时,控制器a中的标签会更新 我只是在学习目标C,与学员相处不太融洽。以下是与我所说内容相关的代码: 控制器B头 #import <UIKit/UIKit.h> @protocol KTTransactionsTableViewControllerDelegate -(v

我有一个视图控制器(a),带有一个显示某些事务余额的标签。在视图控制器中,我有一个容器视图,其中包含一个表视图控制器(B)

当我更改视图控制器(使用选项卡栏)时,平衡会更新,但我希望这样做,以便在控制器B中删除一行时,控制器a中的标签会更新

我只是在学习目标C,与学员相处不太融洽。以下是与我所说内容相关的代码:

控制器B头

#import <UIKit/UIKit.h>

@protocol KTTransactionsTableViewControllerDelegate

-(void) updateLabelWithString:(NSString*)string;

@end

@interface KTTransactionsTableViewController : UITableViewController <UITableViewDataSource, UITableViewDelegate>


@property (strong, nonatomic)NSMutableArray *transactions;
@property (weak, nonatomic) id<KTTransactionsTableViewControllerDelegate>delegate;
@end
控制器A标头

#import <UIKit/UIKit.h>
#import "KTTransactionsTableViewController.h"

@interface KTSummaryViewController : UIViewController <KTTransactionsTableViewControllerDelegate>

@property (strong, nonatomic) IBOutlet UILabel *remainingBalance;

@property (strong, nonatomic) IBOutlet UIView *dateView;
@property (strong, nonatomic) IBOutlet UIView *categoryView;
@property (strong, nonatomic) IBOutlet UISegmentedControl *segmentedControl;



- (IBAction)segmentValueChanged:(UISegmentedControl *)sender;

-(NSString*)calculateBalance;


@end

如果您能帮助我理解我做错了什么,我们将不胜感激

看起来您从未将控制器A设置为控制器B的代理。由于B位于控制器A的容器视图中,因此在实例化这些控制器时将调用prepareForSegue。您可以将控制器A设置为此处的代理(此代码位于控制器A中)


如果此控制器只有一个segue,则可以省略If语句。如果您使用该子句,请确保在IB中为segue指定的标识符与在此处传递的标识符相同。

回答得好。还有,OP:你应该与学员相处融洽。目前,它们仍然是视图控制器之间传递消息的最常见方式。
#import <UIKit/UIKit.h>
#import "KTTransactionsTableViewController.h"

@interface KTSummaryViewController : UIViewController <KTTransactionsTableViewControllerDelegate>

@property (strong, nonatomic) IBOutlet UILabel *remainingBalance;

@property (strong, nonatomic) IBOutlet UIView *dateView;
@property (strong, nonatomic) IBOutlet UIView *categoryView;
@property (strong, nonatomic) IBOutlet UISegmentedControl *segmentedControl;



- (IBAction)segmentValueChanged:(UISegmentedControl *)sender;

-(NSString*)calculateBalance;


@end
#import "KTSummaryViewController.h"
#import "KTCategory.h"
#import "KTCoreDateHelper.h"
#import "KTTransaction.h"

@interface KTSummaryViewController ()

@end

@implementation KTSummaryViewController

@synthesize dateView,categoryView,remainingBalance;


- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    remainingBalance.textColor = [UIColor lightGrayColor];
}

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    [self updateLabelWithString:[self calculateBalance]];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


-(NSString*) calculateBalance
{
    //Get all the Income transactions
    NSManagedObjectContext *context = [KTCoreDateHelper managedObjectContext];

    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"KTTransaction"
                                              inManagedObjectContext:context];
    [request setEntity:entity];

    // Specify that the request should return dictionaries.
    [request setResultType:NSDictionaryResultType];


    // Create an expression for the key path.
    NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"amount"];

    // Create an expression to represent the sum of marks
    NSExpression *maxExpression = [NSExpression expressionForFunction:@"sum:"
                                                            arguments:@[keyPathExpression]];

    NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];
    [expressionDescription setName:@"amountSum"];
    [expressionDescription setExpression:maxExpression];
    [expressionDescription setExpressionResultType:NSInteger32AttributeType];

    // Set the request's properties to fetch just the property represented by the expressions.
    [request setPropertiesToFetch:[NSArray arrayWithObject:expressionDescription]];

    // Execute the fetch.
    NSError *error = nil;
    NSArray *amountResult = [context executeFetchRequest:request error:&error];

    NSLog(@"%@", amountResult);

    NSNumber *sumOfAmounts = [[amountResult objectAtIndex:0] objectForKey:@"amountSum"];

    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc]init];
    [numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];

    NSString *sumCurrency = [numberFormatter stringFromNumber:sumOfAmounts];

    NSLog(@"%@",sumCurrency);


    return sumCurrency;
}

-(void)updateLabelWithString:(NSString *)string{
    remainingBalance.text = string;

}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if([segue.identifier isEqualToString:@"Embed"]) {
        KTTransactionsTableViewController *tvc = segue.destinationViewController;
        tvc.delegate = self;
    }
}