删除观察者不工作

2024-03-21

我有下一个代码:

@implementation SplashViewVC

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.splashView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"Default.png"]];
    self.activityIndicator.originY = 355.f;
    [[NSNotificationCenter defaultCenter] addObserverForName:NCDownloadComplete object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *n){
        NSInteger errorCode = [n.userInfo[@"errorCode"] integerValue];        
        [self.activityIndicator stopAnimating];
        if (errorCode == ERROR_CODE_NO_CONNECTION) {
            UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Some problem with server" delegate:self cancelButtonTitle:@"try again" otherButtonTitles:nil];
            [alertView show];
        } else if (errorCode == 0) {
            [self dismissViewControllerAnimated:YES completion:nil];
        }
    }];
    [self downloadData];
}

- (void)downloadData
{
    [self.activityIndicator startAnimating];
    [[Server sharedServer] getMovieData];
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    [self downloadData];
}

- (void)viewDidDisappear:(BOOL)animated
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [super viewDidDisappear:animated];
}

@end

所以我在开始处放置了断点viewDidLoad方法,在viewDidDisappear。当我启动首先转到的应用程序时viewDidload,下载后进入viewDidDisappear.

但在我的应用程序中,我再次下载数据并发布notification: NSDownloadComplete。在这个 VC 中它可以工作,但我后来使用以下方法删除了:

[[NSNotificationCenter defaultCenter] removeObserver:self]

这个VC使用viewDidLoad一旦开始,就不能再添加Observer。

怎么了?

EDIT我尝试将 addObserver 方法添加到viewWillAppear or viewWillDisappear- 没有结果。 我加NSLog(@"addObserver"); before

 [[NSNotificationCenter defaultCenter] addObserverForName...

在 viewDidLoad 中

和写

- (void)viewDidDisappear:(BOOL)animated
{
    NSLog(@"removeObserver");
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [super viewDidDisappear:animated];
}

在日志中我看到:

2013-06-10 14:32:05.646 myApp[9390:c07] addObserver
2013-06-10 14:32:06.780 myApp[9390:c07] removeObserver

怎么了?

EDIT 2您可以看到观察者必须被删除,但它再次在 addObserver 方法中运行块


除了添加/删除观察者调用未正确平衡(如其他答案中所述)之外,还有另一个问题。

您删除观察者的代码是错误的。对于基于块的观察者,返回值 of addObserver必须作为参数给出removeObserver。所以你应该添加一个属性

@property(nonatomic, strong) id observer;

到班级。然后你添加观察者

self.observer = [[NSNotificationCenter defaultCenter] addObserverForName:NCDownloadComplete object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *n){
    // ...
}];

并将其删除

[[NSNotificationCenter defaultCenter] removeObserver:self.observer];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

删除观察者不工作 的相关文章

  • 如何无限地每1分钟运行一个iOS应用程序?

    我制作了一个应用程序 需要每 1 分钟向服务器发送一次位置和状态更新 我尝试了以下方法 但没有一个能帮助我 有什么解决办法吗 1 NSTimer 很多人建议这样做 但问题出在后台模式上 它只能工作 20 分钟 该应用程序停止发送数据后 2
  • 如何用Block简化回调逻辑?

    假设我需要与一个提供协议的类进行通信 并在操作完成时调用委托方法 如下所示 protocol SomeObjectDelegate required void stuffDone id anObject void stuffFailed e
  • 如何将字符串从 Applescript 传递到 Objective C

    我正在开发一个应用程序 我需要能够传递一个字符串变量 from 苹果脚本 to 目标C 我已经弄清楚如何从 Objective C 类中的方法运行 Applescript 但我需要能够将 NSString 设置为 Applescript 中
  • 检查系统时间是自动还是用户设置

    我需要在当前的项目中设置用户证明时间 我围绕这个问题发现了很多不同的问题 但似乎没有一个问题有我正在寻找的答案 这些是我到目前为止看过的问题 XCODE 如何从设备获取 验证准确的时间戳 https stackoverflow com qu
  • SwiftUI - 预览时未知的预览提供程序“ContentView_Previews_”。发生在一个全新的项目中

    我有这个简单的观点 import SwiftUI struct ContentView View var body some View Text Hello struct ContentView Previews PreviewProvid
  • 为什么没有收到(UDP 多播)数据包?

    所以 我一直试图弄清楚为什么这不起作用 但我没有任何线索 我已经成功地从 iPhone 发送数据包并在 Mac 上接收它们 根据 tcpdump 我的 mac 正确发送数据包 此外 如果我在模拟器中运行它 它工作得很好 这让我相信这是一个网
  • 如何从日期中获取小时、分钟和上午/下午? [复制]

    这个问题在这里已经有答案了 我尝试从日期中提取小时 分钟和上午 下午 但我得到 NULL 输出 我在下面显示了我的代码 请查看 NSString dateStr 29 07 2013 02 00am NSDateFormatter form
  • Swift:无法为“[UIViewController]”类型的值添加下标?

    我试图弄清楚如何在 Xcode 7 iOS9 上的 Swift 中解决此问题 并且我也遇到此错误 无法为 UIViewController 类型的值添加下标 索引类型为 Int 任何建议表示赞赏 谢谢 My code func indexP
  • ShareKit + Facebook 身份验证不起作用

    我正在使用 ShareKit 从我正在开发的 PhoneGap 应用程序发布到 Facebook 我在 Facebook 中创建了该应用程序 并在我的项目中安装了该插件 Twitter 工作正常 但当我尝试在 Facebook 上分享时出现
  • iOS 设置 MKMapView 中心,因此提供的位置位于底部中心

    我有一个 MKMapView 和一个永不改变的 CLLocationCooperative2D 我想做的是将地图居中 以便该坐标将放置在地图的底部中心 我可以用简单的方法将地图集中在这个坐标上 MKCoordinateRegion view
  • PhoneGap 1.4 封装 Sencha Touch 2.X - 性能怎么样?

    我正在构建一个多平台平板电脑应用程序 仅使用其 Webview 使用 Phonegap 1 4 对其进行包装 然后使用 Sencha Touch 2 框架发挥我的魔力 我所说的多平台是指 iOS 5 X 和 Android 3 0 目前 到
  • 如何获取 UITableView 中的所有单元格

    假设我有一个包含多行的 UITableView 我想在某个时间点将所有 UITableViewCells 作为 NSArray 获取 我努力了 tableView visibleCells 但这种方法有一个问题 我无法拥有当前不在当前屏幕中
  • 在 JSQMessagesViewController 中显示 LocationMediaItem

    我刚刚尝试实施LocationMediaItem in my Xamarin iOS应用程序使用JSQMessagesViewController 一切都很顺利 唯一的问题是UICollectionView应该显示位置的单元格永远停留在加载
  • 如何在 Swift 中创建 UIAlertView?

    我一直在努力在 Swift 中创建 UIAlertView 但由于某种原因我无法得到正确的语句 因为我收到此错误 找不到接受提供的 init 重载 论点 我是这样写的 let button2Alert UIAlertView UIAlert
  • let/var 如何解决可变性? [复制]

    这个问题在这里已经有答案了 我没有任何问题 我只是想对有关可变性的问题进行一些澄清 在 Objective C 中我们会使用例如NSMutableArray得到一个可变数组和NSArray得到一个不可变的 我对两者的内部运作了解不多 但据我
  • Xcode 在代码签名身份中看不到我的开发人员证书

    我续订了 IOS 开发人员证书 从钥匙串中删除了旧证书 然后单击了我的证书 钥匙串中的一切看起来都很正常 我有分发 开发人员 WWDC 证书 每个配置文件看起来都有效 并带有绿色标记 在组织器中的团队和配置文件部分下 但在代码签名身份下的
  • iOS 使用 NSColor 与 UIColor?

    有什么区别UIColor and NSColor 什么时候会使用每一种 我碰到NSColor在试图弄清楚的同时UIColor用于 iOS 中的属性字符串 我理解使用UIColor对于 UIKit 等 但我不认为NSColor对于这种事情确实
  • 使用 nib 作为带有 nib 类的表节标题

    我想创建一个加载 nib 文件并将其设置为标题 UIView 的节标题 这个 nib 文件还将有一个关联的类 其中插座和操作连接到 因此我想像平常一样使用 nib 加载该类 我在网上搜索并找到了几个类似的答案 但我找不到任何适合我的答案 经
  • iOS 13 检查 CLLocationManager 的临时授权状态

    根据 WWDC 视频 https developer apple com videos play wwdc2019 705 https developer apple com videos play wwdc2019 705 当你要求 Al
  • 如果加载 dylib,垃圾收集工作队列会崩溃

    我们正在将应用程序从 10 6 移植到 10 8 我正在查看我们在应用程序中加载的 dylib 我面临着非常不寻常的崩溃垃圾收集工作队列并附有以下消息 malloc Thread suspend unable to suspend a th

随机推荐

  • “无法确定临时目录,请手动指定cache_dir”

    Magento 管理员抛出异常 无法确定临时目录 请手动指定cache dir 这是新的托管包上的全新安装 通常它会发生在共享虚拟主机中 但有时也会发生在个人服务器上 如果 tmp 文件夹的权限设置错误 很多人建议修改该文件 lib Zen
  • 如何为列中的每个唯一值创建新的工作簿?

    我需要为 J 列中的每个唯一值运行 foreach 语句 对于每个唯一名称 我想创建一个新的 Excel 工作簿 复制特定名称的所有行 最后使用相同的唯一值保存工作簿 Sub test Range A1 J17 Select Selecti
  • 无法运行钩子/更新后:没有这样的文件或目录

    谢谢这个http danbarber me using git for deployment http danbarber me using git for deployment 很棒的文章 我设法在 git 控制下拥有一个远程服务器 不幸
  • 如何从 VSTS 下载所有附件?

    我正在尝试根据 ID 号将所有工作项附件从 VSTS 下载到它们自己的文件夹中 如果这是可能的 人们将如何继续实现这一目标 我研究过 REST API 但很困惑 而且我找到的所有文档似乎都是关于 Azure DevOps 的 我目前使用的版
  • 如何从 WMI 获取方法

    tl dr我应该怎么SELECT代替 为了获得方法 更多信息 这是一个例子 using var s new ManagementObjectSearcher root CIMV2 SELECT FROM someClass foreach
  • 如何在Python中使用open函数创建文件?

    在Linux环境中 我想创建一个文件并向其中写入文本 HTMLFILE MYUSER OUTPUT myfolder mytext html f open HTMLFILE w IOError Errno 2 No such file or
  • 如何求矩阵的对角线元素?

    我编写了一个函数来将矩阵的对角线元素存储到向量中 但输出并不如我预期 代码是 diagonal lt function x for i in nrow x for j in ncol x if i j a lt x i j print a
  • pandas 枢轴更改 dtype

    使用 pandas hub table 创建新数据框后 数据类型从 int32 更改为 float 原始数据框 df pd DataFrame from dict my dict orient columns dtype i4 print
  • 当 WooCommerce 中所选变体缺货时显示表单

    在 WooCommerce 中联系表格 7 插件 https wordpress org plugins contact form 7 我使用以下代码在单个产品页面上向我的缺货简单产品添加了一个表单 add action woocommer
  • Java多重继承

    为了完全理解如何解决 Java 的多重继承问题 我有一个需要澄清的经典问题 假设我有课Animal这有子类Bird and Horse我需要上课Pegasus延伸自Bird and Horse since Pegasus既是鸟又是马 我认为
  • 将应用程序从 iPhone 5 设备转换为 iPhone 4 设备

    如何使ios应用程序与iphone4设备 即3 5英寸 兼容 它已经内置在iphone 5 4 0英寸屏幕 中 而无需创建不同的xib 使用自动布局允许您的应用程序正确调整大小到正确的屏幕尺寸 Raywenderlich com 有一个很好
  • 使用 xml 和可重用的 xslt 动态生成 HTML 表单

    我有大量的 xml 文件 First
  • 支持哪些 git url 格式?

    Git 接受许多不同的 url 格式 例如 ssh http https 等 是否有任何规范 官方文档可以在其中找到受支持的 git url 格式 我写了一个git url 解析器 https github com IonicaBizau
  • 在 R 和 RStudio 中读取 URL

    当我在 RStudio 中输入以下内容时 它工作正常 nyt1 lt read csv url http stat columbia edu rachel datasets nyt1 csv 但是当我在 R 控制台中输入相同的内容时 我收到
  • 如何在 C 中使用和不使用 sprintf 将十六进制转换为 Ascii?

    I used strtol要将字符串转换为十六进制 现在我需要将其打印到屏幕上 我不确定是否可以使用sprintf因为我在这块板上只有 20k 内存可以使用 欢迎替代方案 要手动执行此操作 最简单的方法是使用一个将 nybbles 映射到
  • 如何在 Python 中连接两个列表而不修改其中任何一个? [复制]

    这个问题在这里已经有答案了 在Python中 我能找到连接两个列表的唯一方法是list extend 这会修改第一个列表 是否有任何串联函数可以返回其结果而不修改其参数 Yes list1 list2 这给出了一个新列表 它是以下内容的串联
  • Apache Flink、JDBC 和 fat jar 是否存在类加载问题?

    使用 Apache Flink 1 8 并尝试运行RichAsyncFunction 我得到No Suitable Driver Found初始化 Hikari 池时出错RichAsyncFunction open 在 IDE 中它运行得很
  • 具有 的组件

    我见过工作示例
  • 指定网格中的默认排序

    使用knockout kendo绑定绑定Telerik Kendo网格时是否可以指定默认排序 我像这样绑定网格 kendoGrid data grid Rows sortable allowUnsort false mode single
  • 删除观察者不工作

    我有下一个代码 implementation SplashViewVC void viewDidLoad super viewDidLoad self splashView backgroundColor UIColor colorWith