在 Objective-c 问题中访问委托静态方法

2024-04-23

我在 Objective-c 中遇到了一个奇怪的问题。这是代码:

STViewController.h

#import <UIKit/UIKit.h>
@interface STViewController : UIViewController <UIAlertViewDelegate>
+(void)myStaticMethod;
@end

STViewController.m

#import "STViewController.h"

@implementation STViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    [STViewController myStaticMethod];
}

+ (void)myStaticMethod {
    UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Foo bar"
                                                    message:@"baz bat"
    //what does self even mean in this context? The class object STViewController?
                                                   delegate:self
                                          cancelButtonTitle:@"Cancel"
                                          otherButtonTitles:@"OK", nil];
    [alert show];
    [alert release];
}

#pragma mark UIAlertViewDelegate

// TRICKY PART if it's static it works, if it's not, it doesn't.
// even though the protocol declares instance methods (with a minus).
+ (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    NSLog(@"It works!");
}

@end

为什么会发生这种情况?它是否正确?我没有收到任何错误或警告。协议方法声明中的 -/+ 是否有作用?


在类方法中self指的是类对象。类对象是一个普通的 objc 对象(派生自NSObject)将接收发送到类(类方法,带有“+”的方法)的消息。

在您的例子中,您使用类对象作为UIAlertView(之所以有效,是因为 UIAlertView 的 API 没有明确要求静态类型的对象id<UIAlertViewDelegate>)。现在,警报视图只会将其委托消息发送到类对象,这也很好,因为您将它们实现为类方法。

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

在 Objective-c 问题中访问委托静态方法 的相关文章

  • UITableView 显示的行数多于 numberOfRowsInSection 中指定的行数:

    我希望我的 tableView 显示 6 行 其中包含文本 在本例中为 示例 据我所知 我有我的numberOfSectionsInTableView and numberOfRowsInSection 设置正确 请参阅下面的示例代码 NS
  • 保存时出现 iphone 核心数据未解决的错误

    尝试保存时 我从核心数据中收到一条奇怪的错误消息 但问题是错误不可重现 在执行不同任务时 它会在不同时间出现 错误消息 Unresolved error Domain NSCocoaErrorDomain Code 1560 UserInf
  • 如何在 iOS 中按下后退按钮时创建确认弹出窗口?

    我想在有人按下 iOS 应用程序的 后退 按钮时添加一个弹出窗口 询问用户是否真的想回来 然后 根据用户的响应 我想撤消该操作或继续 我尝试在视图的 viewWillDisappear 函数中添加代码 然后编写正确的委托 但它不起作用 因为
  • 如何在 Flutter 中为 Button 添加渐变?

    有没有办法改变ElevatedButton背景颜色渐变 如果没有一些小瑕疵或问题 例如缺少涟漪效应 不需要的边框 不尊重主题的内容 上述所有解决方案都无法真正发挥作用minWidth对于按钮 The 下面的解决方案没有上述问题 关键部分是使
  • 如何通过情节提要向导航栏添加后退按钮?

    我现在很困惑 我在网上到处都看到添加自定义后退按钮的教程 但我什至似乎无法启动默认按钮 在我的 MainViewController 中 我有performSegueWithIdentifier 然后在另一端 我希望导航栏在左侧有后退按钮
  • 操作按钮未出现在通知 iOS 10 中

    我在我的应用程序中使用本地推送通知 在 iOS 10 中为通知添加操作按钮时 它不会出现在通知下方 通知正在显示 但通知底部缺少操作按钮 下面给出了 appdelegate 代码 import UIKit import CoreData i
  • 从 NSString 获取子字符串,直到到达特定单词

    假设我有这个NSString Country Address Tel number 我该如何获取之前的子字符串Tel 国家地址 然后我该如何获取后面的子字符串Tel 数字 使用 NSScanner NSString string Count
  • 如何在 iPhone 应用程序中播放来自服务器的视频 URL

    实际上 我通过使用从服务器获取一个网址XMLParser 我想在我的应用程序中播放这个视频网址 现在我使用了 MPMoviePlayerController 但它不起作用 请帮忙 XML解析器 m id loadXMLByURL NSStr
  • Apple 如何通知 iOS 应用程序内购买 (IAP) 退款?

    我在我的应用程序中成功实现了 Apple iOS IAP 并在沙箱中进行了测试 效果很好 我担心用户可能会通过 IAP 购买商品 将其下载到我的应用程序中 然后向 Apple 投诉并获得退款 没有明显的方式将退款报告给我的应用程序 它们是否
  • 更改 UINavigationBar 中 UIBarButtonItem 的位置

    如何更改 UIBarButtonItem 在 UINavigationBar 中的位置 我希望我的按钮比正常位置高约 5 像素 此代码为 UINavigationBar 创建一个具有图像背景和自定义位置的后退按钮 诀窍是创建一个中间视图并修
  • iOS:在代码中访问 app-info.plist 变量

    我正在开发通用应用程序 并且希望访问代码中 app info plist 文件中存储的值 原因 我使用以下方法从故事板动态实例化 UIViewController UIStoryboard storyboard UIStoryboard s
  • .net MVC 将 MP4 流式传输到 iDevice 问题

    我一直在编写用于提供视频服务的一段代码 但遇到了一些问题 代码如下 public ResumingFileStreamResult GetMP4Video string videoID if User Identity IsAuthenti
  • 如何防止 iPhone 4 在添加到主屏幕时截断我的标题?

    我的网页标题很长 当添加到 iPhone 旧版本的主屏幕时 整个标题在确认对话框中可见 当我添加到 iPhone 4 的主屏幕时 标题在第 12 个符号之后被切断 有没有办法阻止这种剪切 让 iPhone 默认显示完整标题 显然会有一个无证
  • Coredata错误setObjectForKey:对象不能为nil

    我正在尝试检查我的核心数据存储中是否有任何数据作为我的应用程序的恢复类型 基本上 如果用户处于最终视图 则 coredata 中会有一些数据不断更新 因此 他们处于最终视图中 然后应用程序崩溃 或者他们将其置于睡眠状态 然后应用程序从内存中
  • NativeScript:禁用 iOS WebView 缩放控件的方法?

    我正在尝试找出一种方法来防止用户通过捏合手势和双击来放大和缩小 iOS WebView tns ios 3 4 1 本质上禁用所有缩放 就像苹果之前使用的 html 元标记一样让用户决定是否要使用 iOS 10 及更高版本进行缩放 我找到了
  • VNFaceObservation BoundingBox 在纵向模式下不缩放

    作为参考 这源于一个问题视觉API 我正在努力使用Vision通过a检测图像中的人脸VNDetectFaceRectanglesRequest 它在确定图像中正确的人脸数量并提供boundingBox对于每张脸 我的麻烦是由于我UIImag
  • 去除iOS输入阴影

    在 iOS Safari 5 上 我必须遵循输入元素 顶部内部阴影 我想删除顶部阴影 错误 webkit appearance不保存 目前的风格是 input border radius 15px border 1px dashed BBB
  • 是否可以开发一个可以跟踪其他应用程序使用情况的应用程序?

    我很想知道是否有可能为 iOS 开发一款类似的应用程序 就像本周刚刚发布的 Android 版应用程序一样 https play google com store apps details id com appuccino Frequenc
  • 制作一个固定大小的 UIView,如 UISwitch(使用 IBDesignable)

    当我使用时本指南 http iphonedev tv blog 2014 12 15 create an ibdesignable uiview subclass with code from an xib file in xcode 6要
  • 如何检测文本是否可读?

    我想知道是否有一种方法可以告诉给定的文本是人类可读的 我所说的人类可读的意思是 它有一些含义 格式就像某人写的文章 或者至少是由软件翻译器生成的供人类阅读的文章 这是背景故事 最近我正在制作一个应用程序 允许用户将短文本上传到数据库 在部署

随机推荐

  • 重命名文档目录中的文件

    我的电脑里有一个PDF文件DocumentDirectory 我希望用户能够将此 PDF 文件重命名为其他名称 如果他们愿意 我会有一个UIButton开始这个过程 新名称将来自UITextField 我该怎么做呢 我是 Swift 新手
  • UIApplication.registerForRemoteNotifications() 必须仅从主线程调用

    Xcode 9 iOS 11 在注册推送 远程 通知时向我显示错误 警告 这是错误消息 这是我尝试过的代码 let center UNUserNotificationCenter current center delegate self c
  • getAllCellInfo - 重复值

    我正在使用 getAllCellInfo 从我的手机获取服务和相邻小区信息 未root的LG G5 对于它的价值 但该函数返回所有相邻测量塔的重复数据 在我所在的地区 我的测试数据大部分时间是3G WCDMA 下面是我的 WCDMA 结果的
  • 撤消 chown 和 chmod [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我是 Ubuntu 新手 我运行以下命令将文件保存在 htdocs 文件夹中 以便方便地使用 XAMPP 进行编程 但不了解其安全后果 s
  • 允许连接到完整性级别不匹配的 .NET COM 服务器

    我在基于 COM 的客户端 服务器设置方面遇到问题 COM 服务器是用 C NET 4 0 编写的 并作为 注册的 本地服务器运行 根据连接到服务器的应用程序 其他客户端将收到服务器执行失败 HRESULT 异常 0x80080005 CO
  • 我可以强制 TypeScript 编译器使用名义类型吗?

    TypeScript 使用结构子类型 https www typescriptlang org docs handbook type compatibility html 所以这实际上是可能的 there is a class class
  • RoutingError 未初始化常量

    我想在我的应用程序中使用 token authenticatable 使用 Devise Using this https stackoverflow com questions 4627703 using devise tokens to
  • 在 I/O 中使用 char16_t 和 char32_t

    C 11介绍char16 t and char32 t以便于处理 UTF 16 和 UTF 32 编码的文本字符串 但是
  • 这在 imacros javascript 中可能吗?尝试了很多方法都没有成功

    我已经处理了所有事情 但不幸的是它返回了 未定义 的数据 我尝试了许多不同的方法来从该网站获取数据 不成功 我在其他论坛上发布了这个问题 没有人能够解决这个问题来处理完整的数据提取 我需要像这样保存数据 91 228 53 28 8089
  • VS Code 刷新集成终端环境变量,无需重新启动/注销

    如果您在 Windows 上添加 更改某些环境变量 例如 PATH 即使重新启动 VS Code 后 它也不会在 VS Code 集成终端中可用 但是 如果您从 Windows 命令提示符 Powershell 打开该终端 它将具有这些新的
  • 获取设备屏幕分辨率

    我使用以下方法来获取屏幕尺寸 public static Point getScreenSize Context context WindowManager wm WindowManager context getSystemService
  • Laravel 5 Blade 在出现错误时显示空白页而不是抛出异常

    在 laravel 4 中 当你尝试渲染一个不存在的视图时应用程序 视图或者带有未定义变量的视图 laravel 将抛出异常或显示有助于调试的错误 我全新安装了 laravel 5 0 13 并且在对刀片模板进行故障排除时遇到了困难 该模板
  • useCallBack 和 useEffect 无限循环

    根据下面的代码 我需要在任何时候调用一个函数inView是真的 但是使用 useEffect and useCallback列出依赖项 我会导致无限循环 我设法避免它的唯一方法是不列出依赖项 但我收到一条警告 要求我列出它们 我只尝试过us
  • RGB 值作为变量

    如何在 rgb 中存储变量值 我使用这个不起作用的代码 我希望它是这样的 但不知怎的 它没有正确存储 R 将引号放在 200 左右 否则 R 也不起作用 我假设你正在使用 JavaScript 结果在 colval rgb 200 10 1
  • 运行“应用程序时出错:未找到目标设备”。 Android Studio 3.6 预览版

    初学者 无法在 Android Studio 3 6 上运行我的第一个 Android 应用程序 如何进行正确的设置才能在模拟器中查看预览设备 I tried the same question and discussion but fai
  • USR1 信号后可靠地终止睡眠进程

    我正在编写一个 shell 脚本 它定期执行任务并从另一个进程接收 USR1 信号 该脚本的结构类似于这个答案 https stackoverflow com a 27694965 1402511 bin bash trap echo do
  • Pygame 中按钮内的进度条

    期望的行为是 当用户将鼠标放在按钮上时 会出现深灰色进度条并开始以恒定的速度递增 我希望能够确定它完全充满需要多长时间 比如 2 秒 如果在进度条达到 100 之前鼠标移出按钮 进度条应直接变为 0 如果条达到 100 程序应在终端中打印一
  • 将重定向运算符与 Java Runtime Exec 一起使用

    我有这个字符串 在 Windows XP 的 JVM 中与 Runtime exec 一起使用 String cmd encoderFull i originalFull bitrate bitrateVBR i bvhq avi outp
  • 将全屏宽度和高度部分分为 3 行

    我有一个完整的宽度和高度部分 html 主页 我怎样才能将这个部分分成 3 行 div 每个 div 都是全宽并具有响应式背景图像 请建议我如何使用 css 和响应式页面来做到这一点 下面是解决方案 对于背景 2 在 css 代码或媒体查询
  • 在 Objective-c 问题中访问委托静态方法

    我在 Objective c 中遇到了一个奇怪的问题 这是代码 STViewController h import