Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 为NSMutableArray中的对象设置属性_Objective C - Fatal编程技术网

Objective c 为NSMutableArray中的对象设置属性

Objective c 为NSMutableArray中的对象设置属性,objective-c,Objective C,好吧,我不太明白这里发生了什么。我正在制作一个简单的纸牌游戏。我创建了一个UIView类别,它处理“卡片”应该包含的所有内容。我觉得这无关紧要,但也许不是 无论如何,在我的视图控制器中,我只是创建了2个NSMutableArray来握住庄家和玩家的手。然后我调用一个方法来设置卡值。在这种方法中,我使用NSLog来查看特定卡对象的值,这一切看起来都很好。但是,如果我试图从视图控制器中获取该值,它总是返回到数组中具有最后一个对象值的所有对象 一些代码: playersCards = [[NSMuta

好吧,我不太明白这里发生了什么。我正在制作一个简单的纸牌游戏。我创建了一个UIView类别,它处理“卡片”应该包含的所有内容。我觉得这无关紧要,但也许不是

无论如何,在我的视图控制器中,我只是创建了2个NSMutableArray来握住庄家和玩家的手。然后我调用一个方法来设置卡值。在这种方法中,我使用NSLog来查看特定卡对象的值,这一切看起来都很好。但是,如果我试图从视图控制器中获取该值,它总是返回到数组中具有最后一个对象值的所有对象

一些代码:

playersCards = [[NSMutableArray alloc] initWithObjects:[[UIView alloc] init],[[UIView alloc] init],nil];

[[playersCards objectAtIndex:0] setCardValue];
[[playersCards objectAtIndex:1] setCardValue];

NSLog(@"1: %i",[[playersCards objectAtIndex:0] returnValue]);
NSLog(@"2: %i",[[playersCards objectAtIndex:1] returnValue]);

因此,当我在调用setCardValue(这在类别中)后获得NSLog时,一切都很好。但是这些nslog就在那里——它们都返回索引1的值。这里发生了什么事

除非您正在做一些复杂的事情,
setCardValue
方法无法知道卡的索引。因此,您可能有两张卡,但它们的初始化相同

然而,这里有一个更大的问题。您确实不想使用
UIView
实例作为这样的数据。你真的想把在屏幕[视图]上渲染东西的比特和保存游戏[模型]状态的比特分开。通常,中间有一个层,该层基于用户与视图[控制器]的交互来管理模型状态

有关更多信息,请参阅上的文档


将现有类与类别挂起似乎很方便,但实际上不应该将其用作在应用程序中封装数据、状态和/或逻辑的主要模式

你真的想让数据[游戏状态]与屏幕[视图]上的数据绘制方式隔离开来

关于您评论中的具体问题,另一个问题是:

假设您的代码是这样编写的:

Card *c = [cardArray objectAtIndex: 0];
[c doSomething];
c
如何知道它在代码中的索引?现在,请注意,所述代码与
[[cardArray objectAtIndex:0]doSomething]相同

如果我在设计某种纸牌游戏,我可能会创建一些类:

  • 一种
    类,只存储一套衣服和价值。支持用于存档目的的NSCoding

  • UIView
    cardwiew
    子类,给定一套套装和价值,它知道如何渲染卡片

  • GameFieldView
    GameFieldController
    一组类,它们知道如何绘制游戏场(前者,UIView子类)以及如何在游戏场上移动CardView(后者,UIViewController)

  • GameFieldController
    的特定子类,为手牌、堆叠、堆叠和/或创建纸牌游戏可能需要的任何其他东西添加逻辑

。。。。等等

也就是说,我会将游戏分解为一系列适合iOS或OSX模型视图控制器模式的类,这样我只需编写少量代码,让系统完成设计的繁重任务


对于所有这些类和所有类来说,这似乎有些过分,但实际上,单个类相对简单且非常灵活。

除非您正在做一些复杂的事情,否则
setCardValue
方法无法知道卡的索引。因此,您可能有两张卡,但它们的初始化相同

然而,这里有一个更大的问题。您确实不想使用
UIView
实例作为这样的数据。你真的想把在屏幕[视图]上渲染东西的比特和保存游戏[模型]状态的比特分开。通常,中间有一个层,该层基于用户与视图[控制器]的交互来管理模型状态

有关更多信息,请参阅上的文档


将现有类与类别挂起似乎很方便,但实际上不应该将其用作在应用程序中封装数据、状态和/或逻辑的主要模式

你真的想让数据[游戏状态]与屏幕[视图]上的数据绘制方式隔离开来

关于您评论中的具体问题,另一个问题是:

假设您的代码是这样编写的:

Card *c = [cardArray objectAtIndex: 0];
[c doSomething];
c
如何知道它在代码中的索引?现在,请注意,所述代码与
[[cardArray objectAtIndex:0]doSomething]相同

如果我在设计某种纸牌游戏,我可能会创建一些类:

  • 一种
    类,只存储一套衣服和价值。支持用于存档目的的NSCoding

  • UIView
    cardwiew
    子类,给定一套套装和价值,它知道如何渲染卡片

  • GameFieldView
    GameFieldController
    一组类,它们知道如何绘制游戏场(前者,UIView子类)以及如何在游戏场上移动CardView(后者,UIViewController)

  • GameFieldController
    的特定子类,为手牌、堆叠、堆叠和/或创建纸牌游戏可能需要的任何其他东西添加逻辑

。。。。等等

也就是说,我会将游戏分解为一系列适合iOS或OSX模型视图控制器模式的类,这样我只需编写少量代码,让系统完成设计的繁重任务


对于所有这些类和所有类来说,这似乎有些过分,但实际上,单个类相对简单且非常灵活。

感谢您的回复。我对Obj-C还很陌生,所以我仍在努力找出接近这些小p的最佳方法