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中的索引,那么我不知道在没有额外代码(将数组包装到实现适当键值编码方法并发出相关通知的对象中)的情况下如何进行绑定。