Iphone 在NSMutableArray中存储指向另一个对象的指针并对其进行更改

Iphone 在NSMutableArray中存储指向另一个对象的指针并对其进行更改,iphone,ios,cocoa-touch,pointers,nsmutablearray,Iphone,Ios,Cocoa Touch,Pointers,Nsmutablearray,我有一个名为GraphicPath的对象,它存储了填充颜色的CGMutablePath和UIColor值。然后我有一个名为graphic的NSMutableArray,它存储了一系列GraphicPath对象,这些对象最终构成了在另一个类的drawRect中绘制的图像 我还有一个弹出的小模块,可以让用户更改此图形的颜色。因此,我有一个单独的NSMutableArray,它跟踪所述图形中与此模块接口的所有颜色。让我们称之为colors。我想这样做,每当我更改颜色时,图形路径中相应的颜色值也会更改(

我有一个名为
GraphicPath
的对象,它存储了填充颜色的
CGMutablePath
UIColor
值。然后我有一个名为
graphic
NSMutableArray
,它存储了一系列
GraphicPath
对象,这些对象最终构成了在另一个类的
drawRect
中绘制的图像

我还有一个弹出的小模块,可以让用户更改此图形的颜色。因此,我有一个单独的
NSMutableArray
,它跟踪所述图形中与此模块接口的所有颜色。让我们称之为
colors
。我想这样做,每当我更改
颜色时,
图形路径
中相应的颜色值也会更改(因此我不必进入
图形路径
数组中找到它来更改它)


因此,显然每个
GraphicPath
属性中的
UIColor
属性需要有一个指向
colors
中颜色的指针。我只是对如何在数组
colors
中保留
UIColor
对象指针感到非常困惑,每当我更改此值时,
GraphicPath
中的相应值也会更改。

正如注释中所述,您需要使GraphicPath对象的UIColor字段指向颜色数组中的相应对象。因此,更改颜色数组中的对象将导致自定义对象的UIColor字段发生“更改”。 例如,如果您有:

UIColor *color1, color2, color3, etc;
NSMutableArray *colors = [[NSMutableArray alloc] initWithObjects:color1, color2, color3, nil];

NSMutableDictionary *graphicDictionary = [[NSMutableDictionary alloc] init];
[graphicDictionary setObject:somePathObject forKey:@"path"]
[graphicDictionary setObject:[colors objectAtIndex:0] forKey:@"color"];
GraphicPath *firstGraphicPathObject = [[GraphicPath alloc] initWithDitionary:graphicDictionary];
因此,接下来,如果您要更改颜色的一个对象,您将更改颜色变量,因此您将更改对象字段返回的值。
我猜是这样的。

所以你有
GraphicPath
对象,它们有
UIColor
属性和
UIColor
s的可变数组。当可变数组中的对象发生“更改”时,您希望它们在
图形路径中也发生更改?但是,
UIColor
是不可变的,因此对象不会被更改。也许您的意思是,当对象添加到颜色数组并从中移除时,每个
GraphicPath
都应该确保其颜色仍在数组中?我真的不知道你的颜色数组会发生什么样的变化,以及这种变化是如何传播回路径对象的。如果用户对某一颜色进行了更改,例如更改了图形中帽子的颜色,则该更改将在该颜色数组中更新为存储帽子颜色的索引。然后,当重新绘制图形时,存储帽子颜色的所有图形路径也将更改,因为它们引用了可变数组中帽子颜色的地址。我明白了,所以当用户用新颜色替换索引3中的颜色时,所有具有存储索引3处替换颜色的属性的
GraphicPath
s应自动开始引用索引3处的替换颜色?看起来解决方案可能包括让颜色路径不拥有颜色,而是通过某个键或名称或在本例中的索引来引用它们;当需要绘制时,他们会在适当的键/名称/索引处检索颜色…我想做的是不可能的吗?那么你到底想做什么?正如我所说,如果图形存储其颜色不是作为UIColor属性,而是通过索引到一个颜色数组中,这似乎解决了这个问题;它可以通过在数组中查找来选择要绘制的颜色。如果您需要做的是将属性的值(特别是指针的值和对象所有权的状态)绑定到NSMutableArray中的索引,那么我不知道在没有额外代码(将数组包装到实现适当键值编码方法并发出相关通知的对象中)的情况下如何进行绑定。