- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
设计问题:
我有 ViewController A,其中包含 NSMutableArray*。 ViewController A 负责向用户显示一个 map ,当用户与该 map 交互时, View Controller A 用坐标对象填充 NSMutableArray*。
NSMutableArray* 中包含的信息稍后应显示在 UITable 中,该 UITable 包含在与 ViewController B 关联的另一个 View 中。
ViewController B 访问 A 填充的 NSMutableArray 最正确的方法是什么? ( A 保存对 NSMutableArray* 的引用)。
应该有多种方法可以做到这一点,但为了保持自己对 MVC 的纯粹,我真的很想知道你的意见。
最佳答案
What is the most correct way for ViewController B to access the NSMutableArray that was filled by A?
我会做一些简单的事情,只有在导致问题时才返回决策。一些简单的事情可以在 Controller A 的公共(public)接口(interface)中公开数组并发送有关数组更新的通知,以便 B 可以观看:
@interface A
@property(readonly) NSArray *foos;
@implementation
- (void) updateFoos {
NSString *const key = @"foos";
[self willChangeValueForKey:key];
[foos doSomething];
[self didChangeValueForKey:key];
}
@interface B
@implementation
- (void) afterSettingA {
[a addObserver:self forKeyPath:@"foos" options:0 context:NULL];
}
- (void) observeValueForKeyPath: (NSString*) keyPath ofObject: (id) object
change: (NSDictionary*) change context: (void*) context
{
NSAssert([keyPath isEqualToString:@"foos"], @"Somethind fishy going on.");
// update what depends on foos
}
另一个简单的解决方案是将数组转换为一个成熟的模型类,您可以将其连接到 A 和 B。(连接必须在 Controller 外部完成以避免过度耦合。您可以使用 Interface Builder,一个将对象连接在一起的“工厂”类或任何其他合适的东西。)
@interface Foo
@property(readonly) NSArray* items;
@implementation
- (void) updateItems {
// send KVO notifications just as above
}
@interface A
@property(retain) Foo *fooModel;
@interface B
@property(retain) Foo *fooModel;
@interface Factory
@implementation
- (void) wireObjects {
A *a = [[A alloc] init];
B *b = [[B alloc] init];
Foo *fooModel = [[Foo alloc] init];
[a setFooModel:fooModel];
[b setFooModel:fooModel];
// Of course the A and B would be member variables of this
// class or you would return a root of the constructed object
// graph from this method, otherwise it would not make sense.
}
在第一个解决方案中,B Controller 必须有一个指向 A 的指针,以便它可以订阅 KVO 通知。 Controller 之间的这种连接最好在代码之外的其他地方维护,即。 B 不应该创建 A 的实例。(这样您将在 A 和 B 之间引入紧密耦合。不太可测试等)如果您已经在 Interface Builder 中实例化了 Controller ,那么这是为 B 提供指向的指针的完美位置A.(只需在 B 中为 A 创建一个 IBOutlet
。)
具有单独模型类的第二个解决方案是“更干净”的 MVC,并且不需要 Controller 彼此了解 - 它们都依赖于模型类。您也可以实例化模型并将其链接到 Interface Builder 中的 Controller 。
顺便说一句:如果B想要监视A的某些属性的变化,它必须在设置到A的链接后订阅。一种简单但有点错误的方法是在 B 的 viewDidLoad
方法中进行订阅。这很方便,但如果之后 A 的链接发生更改,通知不会相应更改。更困难但正确的订阅方法是在 A 的 setter 中 - 当有人设置新的 A 时,您取消对旧 A 的通知订阅并订阅新的通知。
关于iphone - 在两个 UIViewController 之间访问 NSMutableArray 的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2262441/
在 viewDidLoad 上,我的应用程序填充 NSMutableArray arrayOfHaiku,它是 NSDictionary 项的数组,如下所示: NSError *error; NS
我在 NSMutableArray 上是这样的: NSMutableArray *array = [NSMutableArray arrayWithObjects:@"0",@"0",@"0",@"0
我正在尝试设置我的 allArticlesArray 的内容,然后将附加对象附加到数组中。这是我的代码片段: [self.allArticlesArray setArray:newsArray]; [
我用 NSMutableArray 中的数据填充了 TableView ,一切正常。当我选择一个单元格(didSelectRowAtIndex)时,该项目将从数组中删除,正如它应该做的那样。现在我希望
我有一个 NSMutableArray 是我的代表,我也在我的一个 View Controller 中使用它。 所以在 viewDidLoad 我像这样制作我的 NSMutableArray 的可变副
我有 100 个元素的 NSMutableArray。 我想将“20 - 50”、“10 - 20”、“60 - 100”和 50 - 60. 元素加载到单独的 NSMutableArray 中,并将
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 9 年前。 Improve t
我在尝试将字符串的 NSMutableArray 共享给另一个类时遇到了一些问题。我有一个 tableView,其中填充了 Strings,我想将其添加到 NSMutableArray。然后在另一个
正如我们所知,数组是一个连续的内存分配。那么 NSMutableArray 大小将如何增加。 最佳答案 C 数组确实使用连续内存,C++ std::vector 也是如此,但是 NSMutableAr
我需要对一个数组进行排序,里面有一个数组,像这样: NSMutableArray * array_example = [[NSMutableArray alloc] init]; [array_e
这看起来很简单,但我只是得到一个空数组。 我想获取一个按下的按钮,找到它旁边的所有按钮(参见代码中的注释),并将所有找到的按钮添加到另一个 NSMutableArray。 然后我想遍历该数组并对每个按
我正在尝试在另一个 NSMutableArray 中添加 NSMutableArray。但我想做的是嵌套数组。 我当前的代码是: NSMutableArray *array1 = [NSMutab
我有三个类,即DepartmentViewController、DepartmentRequest、Department。这就像我从 DepartmentViewcontroller 发出部门请求,并
我正在尝试将 NSMutableArray 存储在 NSMutableArray 中。所以 var all:NSMutableArray = NSMutableArray() let localArr
这一定是那些错误之一,您一直盯着代码看很长时间,以至于找不到错误。 我有这个代码块,我在其中循环遍历一个包含多个 NSMutableArray 的 NSMutableArray: // FoodVi
我有一个包含 50 个条目的 NSMutableArray - 有什么简单的方法可以将其分成 5 个 NSMutableArray,每个 10 个条目。 最佳答案 是的,要划分 NSMutableAr
我想将 NSMutableArray 的 addObject 放入 NSMutableArray 中,那么我如何快速实现这一点。并检索它,所以请帮助我,因为现在我正在快速学习。 间接说我要二维数组是指
好吧: 我有 NSMutableArray 1 我还有 NSMutableArray 2 我想从数组 1 中删除与数组 2 中的对象匹配的所有对象。 有什么想法吗? 最佳答案 我刚刚打开文档,打印 N
我正在尝试制作 NSMutableArray 的深拷贝,其对象是与此类似的自定义类的实例: @interface CustomParent : NSObject @property NSInteger
我知道你们可能会觉得这是一个重复的问题。但我对我的项目的这个问题搞砸了。 现在转到这个问题,我已经采取了NSMutableArray命名为 arr1包含字符串值,例如 @"34" , @"40"等等。
我是一名优秀的程序员,十分优秀!