iOS开发:故事板与并发编程全解析
发布时间: 2025-08-17 01:56:32 阅读量: 2 订阅数: 11 

# iOS开发:故事板与并发编程全解析
## 1. 故事板中屏幕间数据传递
### 1.1 问题提出
在开发iOS应用时,我们常常需要使用故事板(Storyboards)在不同场景之间传递数据。例如,从一个视图控制器向另一个视图控制器传递用户输入的信息、从服务器获取的数据等。
### 1.2 解决方案
可以使用Segue对象来实现这一需求。Segue是Objective - C中的一个对象,当从一个场景过渡到另一个场景时,故事板运行时会为该过渡创建一个Segue对象,它是`UIStoryboardSegue`类的实例。
### 1.3 具体实现步骤
#### 1.3.1 实现`prepareForSegue:sender:`方法
在第一个视图控制器中实现`prepareForSegue:sender:`方法,示例代码如下:
```objc
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
NSLog(@"Source Controller = %@", [segue sourceViewController]);
NSLog(@"Destination Controller = %@", [segue destinationViewController]);
NSLog(@"Segue Identifier = %@", [segue identifier]);
}
```
运行此应用,会在控制台窗口看到输出结果。不过,此时Segue的标识符可能为`nil`。由于一个场景可能关联多个Segue,为每个Segue设置一个唯一的标识符是个不错的做法,这样可以在视图控制器中检测并采取相应的操作。
#### 1.3.2 为Segue设置标识符
在Interface Builder中为Segue设置标识符,步骤如下:
1. 点击Interface Builder中的Segue对象进行选择。
2. 从视图菜单中选择“Utilities → Show Attributes Inspector”。
3. 在Attributes Inspector的“Identifier”文本字段中,输入想要为该Segue设置的标识符。
#### 1.3.3 传递数据到目标视图控制器
当故事板运行时调用当前视图控制器的`prepareForSegue:sender:`方法为Segue做准备时,目标视图控制器已经在Segue对象中初始化。此时,可以将所需数据传递给目标视图控制器,既可以直接设置目标视图控制器的属性,也可以调用其方法。示例代码如下:
```objc
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
NSLog(@"Source Controller = %@", [segue sourceViewController]);
NSLog(@"Destination Controller = %@", [segue destinationViewController]);
NSLog(@"Segue Identifier = %@", [segue identifier]);
if ([[segue identifier]
isEqualToString:@"SimpleSegueToSecondViewController"]){
SecondViewController *viewController = [segue destinationViewController];
viewController.dataModel = ...; /* Write the code here */
}
}
```
在这个示例中,`dataModel`是目标视图控制器中声明和实现的一个假设属性。
### 1.4 总结
通过Segue对象和`prepareForSegue:sender:`方法,我们可以方便地在不同视图控制器之间传递数据。同时,为Segue设置标识符可以更好地管理和区分不同的过渡操作。
## 2. 为现有项目添加故事板
### 2.1 问题提出
在开发过程中,可能已经编写了不使用故事板的应用代码,现在希望改用故事板来管理应用的流程,而不是手动处理视图控制器的设置。
### 2.2 解决方案
可以按照以下步骤让非故事板应用利用故事板:
1. 从文件菜单中选择“New → New File...”。
2. 在新建文件对话框中,确保选择左侧iOS类别的“Resource”子类别,然后选择右侧的“Storyboard”项,点击“Next”。
3. 选择要为其创建故事板的设备系列。如果应用是仅针对iPhone或iPad的应用,选择相应的设备系列;如果是通用应用,需要先选择一个设备系列创建故事板文件,然后再回来为另一个设备系列创建。完成后点击“Next”。
4. 选择保存故事板的位置。例如,对于基于单视图应用模板的通用应用,可以创建名为`StoryboardiPhone.storyboard`和`StoryboardiPad.storyboard`的两个故事板文件。
5. 在项目结构中找到`Info.plist`文件(该文件可能有不同的名称),点击打开属性列表编辑器。
6. 删除`Info.plist`文件中以下多余的键,因为使用故事板后这些键不再需要:
- `NSMainNibFile`(可能显示为“Main nib file base name”)
- `NSMainNibFile~ipad`(可能显示为“Main nib file base name (iPad)”)
7. 如果是仅针对iPhone或iPad的应用,分别创建新键`UIMainStoryboardFile for iPhone`或`UIMainStoryboardFile~ipad`;如果是通用应用,则两个键都要创建。
8. 为这些键的值提供创建的故事板文件名(不包含`.storyboard`扩展名)。
9. 保存`Info.plist`文件。
10. 最后,从应用委托的`application:didFinishLaunchingWithOptions:`方法中移除设置视图控制器的代码。使用故事板后,不再需要在应用委托中手动设置视图控制器。
### 2.3 注意事项
不使用故事板创建的应用与使用故事板的应用结构不同。基于故事板的应用不再使用主nib文件来设置窗口,因此需要从应用的`.plist`文件中移除该文件。同时,要确保应用委托不会干扰故事板的加载,避免为窗口的`rootViewController`属性分配对象,否则故事板将无法显示。可以选择注释掉`application:didFinishLaunchingWithOptions:`方法中的相关代码,或者将初始化操作(如初始化数据模型)放在应用的其他位置。
### 2.4 流程图
```mermaid
graph TD;
A[选择New File] --> B[选择Storyboard];
B --> C[选择设备系列];
C --> D[选择保存位
```
0
0
相关推荐










