首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解NSNotifications和更新属性

理解NSNotifications和更新属性
EN

Stack Overflow用户
提问于 2015-03-30 06:27:03
回答 1查看 43关注 0票数 0

我有一个拍照应用程序,它有一个PhotoViewController,下面的代码用于通知。在此视图控制器上还有一个按钮,该按钮调用通过委托在PhotoViewController中打开的照片拍摄视图控制器。

PhotoViewVC.h包含:

代码语言:javascript
复制
@interface PhotoViewVC : UIViewController <UITextViewDelegate, PhotoTakingVCDelegate>

// Photo data
@property (nonatomic, strong) NSData *photoData;
@property (nonatomic, strong) NSString *photoText;
@property (nonatomic, strong) NSString *photoObject;
@property (nonatomic, strong) NSString *photoParentObject;
@property (nonatomic, strong) NSString *photoUsername;
@property (nonatomic, strong) NSNumber *photoBestCount;
@property (nonatomic, strong) NSNumber *photoReplyCount;
@property (nonatomic, strong) NSMutableAttributedString *photoLabel;
@property (nonatomic, assign) BOOL photoViewerAddedBests;

@end

PhotoViewVC.m有:

代码语言:javascript
复制
- (void) viewDidLoad
{
    [self postNotification];
    [self listenToNotifications];
}

- (void) postNotification
{        
    NSDictionary *dataDict = [NSDictionary dictionaryWithObject:_photoObject forKey:@"photoObject"];

    [[NSNotificationCenter defaultCenter] postNotificationName:@"replyHappened" object:self userInfo:dataDict];
}

- (void) listenToNotifications
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleReplied:) name:@"replyHappened" object:nil];
}

- (void) handleReplied:(NSNotification *) note
{
    NSDictionary *data = [note userInfo];

    if (data != nil)
    {
        NSString *object = [data objectForKey:@"photoObject"];

        // Update counts
        int count = [_photoBestCount intValue];

        count = count + 1;

        _photoBestCount = [NSNumber numberWithInt:count];

        _bestsCount.text = [NSString stringWithFormat:@"%@", _photoBestCount];
    }
}

- (void) dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

// Now the PhotoTakingVC delegation functions:

- (void) photoTakingVCDismiss:(PostViewController *) sender
{
    [sender dismissViewControllerAnimated:YES completion:nil];
}

- (void) photoTakingVCPresent:(PostViewController *) sender
{
    [self dismissViewControllerAnimated:YES completion:nil];

    PhotoViewVC *best = [[PhotoViewVC alloc] init];

    best.photoData = _photoData;
    best.photoText = _photoText;
    best.photoObject = _photoObject;
    best.photoParentObject = _photoParentObject;
    best.photoUsername = _photoUsername;
    best.photoBestCount = _photoBestCount;
    best.photoReplyCount = _photoReplyCount;
    best.photoLabel = _photoLabel;
    best.photoViewerAddedBests = _photoViewerAddedBests;

    best.hidesBottomBarWhenPushed = YES;

    [self.navigationController pushViewController:best animated:NO];
}

- (void) photoView:(NSData *) photo andText:(NSString *) text andObject:(NSString *) object andParentObject:(NSString *) parentObject andUsername:(NSString *) username andBestCount:(NSNumber *) bestCount andReplyCount:(NSNumber *) replyCount andLabel:(NSMutableAttributedString *) label andAddedBests:(BOOL) addedBests
{
    _photoData = photo;
    _photoText = text;
    _photoObject = object;
    _photoParentObject = parentObject;
    _photoUsername = username;
    _photoBestCount = bestCount;
    _photoReplyCount = replyCount;
    _photoLabel = label;
    _photoViewerAddedBests = addedBests;
}

我很难使我的计数增加。所以我的应用程序是这样工作的:

  1. PhotoTakingVC启动并创建所有最佳计数(初始值为0)。
  2. 正确加载PhotoViewVC,最佳计数为0。
  3. 用户在PhotoViewVC上并单击“回复”按钮。
  4. PhotoTakingVC弹出并拍照。
  5. PhotoViewVC为新照片创建了一个自身的新实例。
  6. 用户在PhotoViewVC的第二个实例上点击back按钮,然后返回到第一个实例。
  7. 计数被设置为1,这是正确的。
  8. 使用PhotoViewVC的第一个实例再次点击回复。
  9. 再次,PhotoTakingVC弹出并保存照片及其数据。
  10. PhotoViewVC通过委托创建PhotoViewVC的另一个实例(第三个)。
  11. 用户单击第三个实例返回到第一个实例。
  12. 最好的数仍然是1,应该是2。

为什么每次_photoBestCount从0开始,而不是持续增加?

EN

回答 1

Stack Overflow用户

发布于 2015-03-30 06:51:16

在步骤10中,您声明:

PhotoViewVC通过委托创建PhotoViewVC的另一个实例(第三个)。

每次创建新的VC时,您都要创建一个新的iVar _photoBestCount,初始化为零。因此,如果您想要一个持久计数器,只需将该属性放入一个Model类(称为PhotoCounter或其他什么)。创建该类的一个实例并将其传递给PhotoViewVC。现在,每次更新这个iVar时,您使用的都是同一个计数器,而不是一个新的计数器

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29339640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档