Kyl*_*uth 2 iphone objective-c set
我一直在网上搜索,尝试到目前为止我能想到的一切都无济于事.这是我的问题:在我的程序中我有一个名为Scale的类,Scale有几个属性.用户可以通过单击名为addScale的按钮将比例添加到tableView.按下addScale时,我将其添加到OrderedMutableSet.我使用该集来存储比例并防止重复比例.我不得不重写isEqual方法和Hash方法来欺骗计算机,以为两个具有相同属性的Scales完全相同.这很好用.但是当我打开应用程序并且之前在tableView中有一些比例时,我已经实现了归档,因此这些比例重新出现,正如预期的那样.这次,当按下addScale时,我得到一个例外:
-[__NSOrderedSetI addObject:]: unrecognized selector sent to instance 0x746dbf0
2011-08-29 13:20:49.095 MusicLog[678:f203]
*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '-[__NSOrderedSetI addObject:]: unrecognized selector sent to instance 0x746dbf0'
Run Code Online (Sandbox Code Playgroud)
这是我的isEqual方法和我的Hash方法的代码:(补品,模式,节奏,八度音程和节奏都是整数)
- (NSUInteger)hash
{
NSUInteger prime = 31;
NSUInteger result = 1;
result = prime * result + tonic;
result = prime * result + mode;
result = prime * result + rhythm;
result = prime * result + octaves;
result = prime * result + tempo;
NSLog(@"%u", result);
NSLog(@"%u", NSUIntegerMax);
return result;
}
- (BOOL)isEqual:(Scale *)object
{
if ((tonic == [object tonic])
&& (mode == [object mode])
&& (rhythm == [object rhythm])
&& (octaves == [object octaves])
&& (tempo == [object tempo]))
return YES;
else
return NO;
}
Run Code Online (Sandbox Code Playgroud)
这是我的addScale方法的代码:
- (IBAction)addScale:(id)sender
{
Scale *chosenScale = [[Scale alloc] init];
[chosenScale setTonic:[myPicker selectedRowInComponent:0]];
[chosenScale setMode:[myPicker selectedRowInComponent:1]];
[chosenScale setRhythm:[myPicker selectedRowInComponent:2]];
[chosenScale setOctaves:[octavesSegmentedControl selectedSegmentIndex] + 1];
[chosenScale setTempo: (int) [tempoStepper value]];
[[ScaleStore defaultStore] addScale:chosenScale];
}
Run Code Online (Sandbox Code Playgroud)
ScaleStore的addScale方法只是从NSOrderedMutableSet调用addObject,这是存储所有比例的地方.
非常感谢您提供的任何帮助.
谢谢,
ķ
取消归档时,对象将恢复为不可变版本(NSMutableSet变为NSSet,NSMutableArray变为NSArray等)
只需使用已还原集中的对象创建一个新的NSOrderedMutableSet.
| 归档时间: |
|
| 查看次数: |
547 次 |
| 最近记录: |