gpt4 book ai didi

iphone - iPhone 词典应用程序上的模型- View - Controller 实践

转载 作者:行者123 更新时间:2023-12-03 19:36:36 25 4
gpt4 key购买 nike

我是一名新开发人员,正在创建一个供个人使用的简单“字典”应用程序,我的问题是如何在我的特定情况下正确实现模型- View - Controller 设计。请耐心等待我了解必要的背景:

我希望能够点击按钮并让标签在屏幕的一侧显示单词,并让另一个标签在另一侧显示相关单词的列表。

例如:当我点击按钮时,我希望主标签显示“猫”,列表显示“老虎”、“雪豹”、“狮子”等。输出将是随机的:标签显示的内容将是随机的,并且列表将是困惑的。

我通过将每个列表存储在 NSMutableArray 中,并使用 NSDictionary 保存所有 NSArray,在 Xcode 4.3 控制台中实现了此输出。这是代码:

//creates lists
NSArray *catList = [NSArray arrayWithObjects:@"Lion", @"Snow Leopard", @"Cheetah", nil];
NSArray *dogList = [NSArray arrayWithObjects:@"Dachshund", @"Pitt Bull", @"Pug", nil];
...
//creates dictionary and stores lists values with dictionary keys
NSMutableDictionary *wordDictionary = [[NSMutableDictionary alloc] init];
[wordDictionary setObject: catList forKey:@"Cats"];
[wordDictionary setObject: dogList forKey:@"Dogs"];
...
//randomizes selection of dictionary key
NSInteger keyCount = [[wordDictionary allKeys] count];
NSInteger randomKeyIndex = arc4random() % keyCount;
//displays selected key, which is the main word
NSLog(@"%@", randomKey);
//selects array list corresponding to key
NSMutableArray *randomlySelectedArray = [wordDictionary objectForKey:randomKey];
//shuffles the output of the selected word list array
for( int index = 0; index < keyCount; index++ )
{
int randomIndex = arc4random() % keyCount;
[randomlySelectedArray exchangeObjectAtIndex:index withObjectAtIndex:randomIndex];
}
//prints word list and removes displayed dictionary selection
NSLog(@"%@", randomlySelectedArray);
[wordDictionary removeObjectForKey:randomKey];

(我需要添加显示主要单词并一次列出一个单词的代码,可能使用 NSTimer,但这就是我到目前为止所得到的。)

使用 Xcode 中的单 View 模板,通过将一些代码添加到我的 View Controller 实现文件中按钮的 IBAction 方法中,我已经能够让模拟器显示主要单词和相应的列表。 (当然,我将 NSLog 更改为 initWithFormat。)但是,我的随机化代码都不起作用。

最后,我的问题是如何分离事物以使它们最符合 MVC 设计?我在想:我的按钮和我的两个标签构成了 View 。我的 View Controller 是 Controller ,我的 NSArrays 和 NSDictionary 数据是模型。

但是,我一直将所有模型数据保存在 View Controller 中,我很确定这是错误的。我认为我需要弄清楚如何为我的 NSArrays 和 NSDictionary 创建一个类来存储我的模型数据。然后我必须设法让按钮和标签通过 View Controller 显示模型数据所需的文本。至少我认为这就是 MVC 的工作原理。

我想知道这种理解是否正确,以及是否有人对如何最有效地组织我的模型数据以获得我想要的输出有任何指示。

非常感谢您的帮助!我被困住了!

最佳答案

在开始设计基于MVC的应用程序之前。我们首先要知道这些不同的组件是什么以及MVC帮助我们实现什么?

为什么我们使用MVC?(模型- View - Controller )因为它可以帮助我们:

Separating responsibilites also leads to reusability

By minimizing dependencies, you can take a model or view class you’ve already written and use it elsewhere

Think of ways to write less code

在设计基于MVC的应用程序时,我们应该关注以上几点。让我们将这个“词典”应用程序与现实世界的词典联系起来。

字典由单词及其含义、发音、例句、用法、反义词、同义词、索引和其他类似信息组成。当用户想要查找特定单词时,他将使用顶部边缘单词进行快速查找。一旦找到正确的页面,他就会转到该单词并查看其含义、用法或其他所需信息。

模型部分:

让我们在您的应用程序和我上面描述的内容之间进行类比。

In your application you will be having a class : 'Dictionary' which will represent the real world dictionary. This dictionary is composed of words, their meaning, pronunciation, usage and other information. So we will need an array of words which will contain 'Word' object. The 'Word' class will have all the information that we wish to provide for particular word. You can also provide other attributes that you can think of that belongs to Dictionary and add them to it.(Here we are talking about content only)

现在我们需要考虑对该字典执行不同的操作。最基本的操作是创建字典并访问它。

  1. We will have a DictionaryCreator class which will add all the words that our dictionary will have. So this is another class 'DictionaryCreator'. Or we can put this creating logic in 'Dictionary' init methods. But it will be helpful to have this class this will enable the dictionary add-word features.

  2. Once DictionaryCreator creates a dictionary, User will be ready to use it. So we will need to provide different operations that a user can perform on 'Dictionary' as its methods. In our case we can consider user is over controller, which in fact is controlled by real user.

上述技术将帮助您创建一个仅执行其职责的组件,并且可以在其他应用程序中重用或扩展以供将来使用。*永远记住模型是 MVC 设计中最可重用的组件。因此,每当您对模型有疑问时,请提醒“模型必须可重用”这句话。(不知道 View 或 Controller )

我们刚刚完成了应用程序的模型部分。

查看部分:

这取决于您希望向用户提供什么界面。但让我们再次考虑一下现实世界的字典。现实世界词典的内容(信息)分布在多个页面上。这个 View 帮助我们在字典中查看/访问/标记/书签。(请记住,这里用户执行所有操作,而不是页面或字典)。这些页面的顶部或底部有简单的单词查找,底部有一些发音指导。

在您的应用程序中,您说“我希望能够点击按钮并让标签在屏幕的一侧显示单词,并让另一个标签在另一侧显示相关单词的列表。”

这里我们再次有多个选项来实现这一点,您可以使用 Interface Builder 创建 View 并将它们与您的 Controller 连接。但话又说回来,这个 Controller 和 View 将紧密耦合,当我们希望在其他地方使用类似的界面时,我们将无法这样做。因此,为了可重用性,我们将创建另一个 UIView 类,并使用新的 View XIB 创建它并加载此 Nib 。因此,将来如果您需要类似类型的 View ,您可以轻松重用(例如 cocoa-touch 为我们提供了 UIView、UIButton 等)。

*View 也往往是 MVC 中的可重用组件。(不知道 Controller ,可能知道相关的模型对象)

Controller 部分:

现在我们已经创建了 View 和模型,但是它们将如何通信? Controller 将在这方面帮助他们。 Controller :

Knows about model and view objects
The brains of the operation
Manages relationships and data flow
Typically app-specific, so rarely reusable

*我从斯坦福大学讲座[CS193P - 讲座 6] 中获取的要点和定义iPhone应用程序开发设计 iPhone 应用程序模型- View - Controller (为什么以及如何?) View Controller ]

更新:

最近,我又看到了一篇关于 MVC 的很好的讲座。它通过非常好的例子以更好的方式解释了这个设计概念。可以在iTunes U上下载或者直接调用iPad and iPhone Application Development (SD)进入第一讲作者:保罗·赫加蒂。

关于iphone - iPhone 词典应用程序上的模型- View - Controller 实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9510404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com