在 Objective-C 中如何在视图控制器之间传递对象?

2023-12-08

我花了两天时间艰难地研究一些代码,试图找出为什么我无法获取我在 .h 中声明并在 .m 中实现并在 viewDidLoad 函数中设置的全局 NSMutableArray 变量。

我终于明白了:Objective-C 中不存在全局变量这样的东西,至少在我所了解的 PHP 意义上是这样。我没有真正读过 XCode 错误警告,但它就在那里,即使不是很简单的英语:“实例变量‘blah’在类方法中访问。”

我的问题:我现在应该做什么?我有两个视图控制器,需要访问我通过 URL 从 JSON 文件生成的中央 NSMutableDictionary。它基本上是我所有表视图钻取的扩展菜单,我想要一些其他“全局”(非静态)变量。

每次我想要生成此 NSMutableDictionary 时是否都必须获取 JSON,还是有某种方法可以设置一次并通过 #import 从各种类访问它?我是否必须将数据写入文件,或者人们通常有其他方式这样做吗?


如果您有两个访问共享 NSMutableDictionary 的视图控制器,您可以将指向公共字典的指针传递到它们各自的 init 消息中吗?

所以在你的 AppDelegate 中:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{
  // the app delegate doesn't keep a reference this, it just passes it to the 
  // view controllers who retain the data (and it goes away when both have been released)
  NSMutableDictionary * commonData = [[NSMutableDictionary new] autorelease];

  // some method to parse the JSON and build the dictionary
  [self populateDataFromJSON:commonData];

   // each view controller retains the pointer to NSMutableDictionary (and releases it on dealloc)
   self.m_viewControllerOne = [[[UIViewControllerOne alloc] initWithData:commonData] autorelease];
   self.m_viewControllerTwo = [[[UIViewControllerTwo alloc] initWithData:commonData] autorelease];
}

在您各自的 UIViewControllerOne 和 UIViewControllerTwo 实现中

- (id)initWithData:(NSMutableDictionary*)data
{
    // call the base class ini
    if (!(self=[super init]))
        return nil;

    // set your retained property
    self.sharedData = data;
}

// don't forget to release the property
- (void)dealloc {
    [sharedData release];
    [super dealloc];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Objective-C 中如何在视图控制器之间传递对象? 的相关文章

  • 如何获取CATransition/Animation的结束事件?

    我的代码如下所示 CATransition transition CATransition animation transition duration duration 我希望得到CATransition Animation的结束事件 是否
  • 如何将 UILabel 的值绑定到实例变量?

    我是 mac objective c 的新手 我的问题是 我想知道是否可以将 UILabel 文本绑定到变量 而不必在值更改时手动设置文本 例如 在 Mac OS 上 当我打开新的 Finder 窗口并删除文件时 任务栏中的全局可用空间就会
  • Objective-C – 拥有包含 TestFlight SDK 的 TestFlight 配置

    我已按照 TestFlight 的说明复制 发布 配置 我还使用 TestFlight SDK 从我的应用程序获取实时报告 通过这样做 我必须在我的应用程序中包含一些 TestFlight 代码 当然 我不想在我的应用程序的发布版本中包含此
  • 如何禁用 iPhone 邮件应用程序中的电话号码链接?

    我的公司正在发送数字电子邮件收据 但遇到了 iPhone Mail 检测数字数据并将其自动链接为电话号码的问题 我已经看到元标记应该可以解决 iPhone 上的 Mobil Safari 中的问题 但该技巧似乎不适用于 Mail 有谁知道如
  • 升级到 Xcode 4.3.1 后,自动设备配置选项消失了?

    自从升级到 Xcode 4 3 1 以来 这是我第一次发布版本 在查看我的配置文件是否是最新的时 我还注意到不再显示自动更新设备配置 即 它应该出现在该屏幕截图中的位置对我来说没有出现 如何将新设备添加到团队配置文件中 https stac
  • 水平 UICollectionView 单行布局

    我正在尝试使用以下命令设置简单的水平布局UICollectionView 兜圈子却没有达到预期的结果 所以任何指针或例子将不胜感激 我粘贴经常更改的代码但没有成功可能没什么意义 该图像显示两行 第一行是单个项目 尺寸正确并且在中心正确对齐
  • 加载新控制器时,iPhone 横向模式切换到纵向模式

    我的应用程序在横向模式下正确启动并且运行良好 BOOL shouldAutorotateToInterfaceOrientation UIInterfaceOrientation interfaceOrientation if interf
  • 什么是 WKWebView 中的 WKErrorDomain 错误 4

    fatal error LPWebView encounters an error Error Domain WKErrorDomain Code 4 A JavaScript exception occurred UserInfo 0x7
  • Apple Mach-O 链接器错误(静态,不是 ld)

    我最近遇到了 Apple Mach O 链接器错误 大多数指南建议将 构建设置 中的位码更改为 否 但它仅适用于 ld 错误 这与我的不同 我会提供截图 请帮忙修复bug pod HandySwift 导致了错误的出现 这是它的 Githu
  • 从 robovm 项目创建 iOS 静态库(JNI 中的 BAD_ACCESS)

    我有大量的Java代码 只有计算函数 没有UI 我想在iOS中将其重用为静态库 我的方法是使用robovm http www robovm com并按照robovm论坛中两篇文章中描述的非官方方式创建静态库 1 基本方式 https gro
  • 有没有类似于 iOS 的 canOpenURL 来检查移动浏览器的 URL 方案? [复制]

    这个问题在这里已经有答案了 可能的重复 iPhone Safari 检查 JavaScript 是否支持 URL 方案 https stackoverflow com questions 627916 iphone safari check
  • Flutter 应用程序在 iOS 平台的 firebase 电话身份验证中崩溃

    我在我的项目中实现了 Firebase Phone auth 在 Android 端 一切正常 但对于 iOS 端 当我尝试从我的端发送验证码时 应用程序崩溃并失去连接 我已在下面提交了我的代码 主程序 dart class MyApp e
  • 在 iOS 7 中 viewForHeaderInSection 部分是从 1 开始而不是从 0 开始

    我正在处理UITableView在我的项目中 这个项目是在 Xcode 4 5 中创建的 现在我正在使用 Xcode 5 所以我的问题是何时在 iOS 6 中运行我的项目 viewForHeaderInSection方法部分从 0 开始没问
  • Xamarin - 错误:dsymutil 退出,代码为 72

    最近升级到 VS for Mac 8 10 21 在构建应用程序时 我得到 Xamarin Shared targets 3 3 Error dsymutil exited with code 72 这是 Xcode 13 3 的情况 完整
  • iOS 7 tabBar 横线,如何去掉?

    Apple 在 iOS 7 中的 tabBar 上添加了一条细线 该线应该在 tabBar 和 UI 之间起到阴影或淡入淡出的作用 由于我使用的是定制的 tabBar 这条线非常令人恼火 你如何删除它 请告诉我这是可能的 否则我需要重新设计
  • 在 WKWebView 中禁用缩放?

    有谁知道在 WKWebView 中禁用双击和捏缩放的简单方法 我尝试过的任何方法都不起作用 Webview scrollView allowsMagnification false Error value of type WKWebView
  • 从现有坐标地图套件中查找最近的位置

    我正在为拥有多家商店的客户开发 iPhone 应用程序 目标 C 我有数组中所有商店 20 的坐标 纬度 长 目前我正在考虑循环遍历商店坐标数组并获取从用户当前位置到商店位置的距离 然后将它们添加到数组中并按最小距离进行排序 这是正确的方法
  • Glib 在 iPhone 应用程序中的使用

    我想基于现有的开源 Objective C 框架开发一个 iPhone 应用程序 但是该框架广泛使用了 glib 库 我找不到一种方法来构建和包含 iPhone 应用程序的 glib 库 非越狱 有什么办法可以做到这一点 或者有没有推荐的方
  • 移动带有图像的文件夹

    我正在使用 Xcode 目前我的图像位于桌面上 将它们移至文件夹的正确方法是什么 当我只是复制粘贴它们时 我的项目不会构建 有没有简单的方法可以做到这一点 而无需将图像一一重新链接 1 在 Xcode 项目导航器中 选择要添加的项目的目标项
  • Phonegap Build 与 Xcode4 上的 Phonegap 对比?配置.xml?

    有一个使用phonegap构建的应用程序 我已经使用它编译和测试了http build phonegap com http build phonegap com服务 我发现它使用 XCode 的构建方式与在 Phonegap 网站上的构建方

随机推荐

  • 未找到 Apple-app-site-association

    我正在尝试通过Apple 搜索验证工具 并且我在使用 apple app site association 时遇到问题 由于某种原因 机器人找不到我的文件 但如果你打开 URL 它就在那里 这不是格式问题 因为甚至找不到该文件 我有 htt
  • 将 JSON 驼峰式大小写转换为蛇形大小写(反之亦然)并将数值字符串化

    我必须向 Web REST 服务发送和接收 JSON 对象 这些对象由 DLL 生成 该 DLL 将属性名称序列化为大驼峰式命名法 PropertyName 而 Web 服务需要蛇形命名法 property name 另外 DLL 将数值序
  • GMaps JS 地理编码:通过异步地理编码功能使用/传递变量?

    我有一个位置对象的数组列表 我正在使用其中一些来构建完整的地址 然后对其进行地理编码 一旦我收到 OK 状态 我就会在地图上放置一个标记 这一切都很好 但是 现在我还想在每个标记上放置一个信息窗口 其中包含数组列表中的另一个属性 Locat
  • iPhone:向滚动视图添加按钮使按钮无法交互

    由于某种原因 在我的 viewController 的 addBook 方法中初始化的按钮不会响应触摸 我分配给它的选择器永远不会触发 点击图像时也不会出现 UIControlStateHighlighted 图像 在触摸到达 UIButt
  • 检查函数是否被作为 goroutine 调用

    有什么办法可以知道正在运行的函数是否被调用为 goroutine 吗 我读过 gotour 并且对使用 golang 构建 websocket 服务器感兴趣 所以我找到了这个教程https tutorialedge net golang g
  • 在 ASP.NET MVC 中以编程方式验证模型列表

    我想以编程方式一一验证模型列表 I tried 尝试验证模型但看起来它聚合了验证错误 因此当我迭代 10 个模型的列表时 如果第 5 个模型无效 则对于模型 6 10 TryValidateModel 返回false 您可以使用控制器方法V
  • 修改编辑距离以实现位置偏差

    我使用 Levenshtein 距离算法将作为用户输入提供的公司名称与已知公司名称的数据库进行比较 以找到最接近的匹配 就其本身而言 该算法工作正常 但我想构建一个偏差 以便如果字符串的初始部分匹配 则编辑距离被认为较低 例如 如果搜索条件
  • Haskell 中的类型比较

    我还在学习 Haskell 的基础知识 我试图找到这个简单问题的答案 所以我提前道歉 因为我确信它很简单 Given data Fruit Fruit Apple Orange deriving Show Eq a Apple 如何检查某个
  • 按百分比设置位置 - Android DisplayMetrics

    我喜欢对应用程序中的所有位置使用百分比 我总是使用相同的系统 我是android编程新手 这是班级 public class SCREEN DisplayMetrics dm new DisplayMetrics Point size ne
  • React/Redux 下载文件

    单击按钮时我需要从服务器下载文件 我创建了一个 MaterialUI 按钮 并在其 onclick 回调上调用容器组件的操作连接的 该操作是异步的 并执行 ajax POST export const onXlsxClick gt disp
  • 如何设置material-ui TextField 仅接受十六进制字符

    我希望我的 TextField 仅接受 0 9 和字母 A F 的值 谢谢
  • 如何更改此代码以允许附加到列表?

    我在这段代码之后附加或实际上打印任何内容时遇到问题 reversedPriv 52 27 13 6 3 2 array 9 var 0 numA for i in array for j in reversedPriv while var
  • 如何使用 awk 或 sed 递归查找/替换字符串?

    如何查找并替换每次出现的情况 subdomainA example com with subdomainB example com 在每个文本文件中 home www 目录树递归 find home www type d name git
  • Xcode 退出时找不到 Parse/Parse.h 文件

    我在我的项目中添加了 Parse SDK 一切都很好 然而 当我退出 Xcode 并打开项目时 我收到以下错误 Parse Parse h file not found 我删除了 Parse Framework 并将其重新添加到我的项目中
  • 使用委托或 lambda 封装秒表计时?

    我正在编写这样的代码 做了一些快速而肮脏的计时 var sw new Stopwatch sw Start for int i 0 i lt 1000 i b DoStuff s sw Stop Console WriteLine sw E
  • 将字节存储到寄存器 x86-64 程序集中的问题

    我正在尝试编写一个函数来确定作为第一个参数给出的字符串的长度 因此 rdi 将包含 char ptr 当我打电话时movb rdi rcx将 rdi 指向的字符移动到 rcx 中 出现以下错误 incorrect register rdx
  • Android MediaRecorder Video - 随后播放音频和视频轨道

    我遇到了一个错误 主要出现在三星设备上 我用媒体记录器录制视频 代码如下所示 它在所有设备上都能完美运行 但现在在某些 Android 设备上 音频和视频轨道是分开的 假设我正在捕捉 5 秒的视频 视频时长为 5 秒 播放视频将播放视频的第
  • 使用ajax发送base64图像

    我正在尝试从画布中生成图像 并通过 ajax 发出的 POST 请求将其发送到服务器 我正在使用 html2canvas 将 div 转换为 canvas 并使用 toDataURL 将其转换为 base64 这是我的JS function
  • 如何在 XPath 中使用 AND 运算符?

    XML 就像 a b value1 b b value2 b a 我想写 XPath 来查找 id a 那里会有两个 b 具有固定值的子节点value1 and value2 我试图找出 XPath 的条件如下 xml gt xpath b
  • 在 Objective-C 中如何在视图控制器之间传递对象?

    我花了两天时间艰难地研究一些代码 试图找出为什么我无法获取我在 h 中声明并在 m 中实现并在 viewDidLoad 函数中设置的全局 NSMutableArray 变量 我终于明白了 Objective C 中不存在全局变量这样的东西