mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-23 00:41:02 +00:00
Made overrideSetterFor: aware of dependent key mapping.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@25739 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
babf83a2a1
commit
74757182a4
2 changed files with 48 additions and 6 deletions
|
@ -1,3 +1,8 @@
|
|||
2007-12-14 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* Source/NSKeyValueObserving.m (-overrideSetterFor:): Made aware
|
||||
of dependent key mapping.
|
||||
|
||||
2007-12-14 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* Source/NSKeyValueObserving.m: Rewrite code for the subclass which
|
||||
|
|
|
@ -506,8 +506,39 @@ replacementForInstance(id o)
|
|||
}
|
||||
else
|
||||
{
|
||||
[NSException raise: NSInvalidArgumentException
|
||||
format: @"class not KVC complient for %@", aKey];
|
||||
NSMapTable depKeys = NSMapGet(dependentKeyTable, [self class]);
|
||||
|
||||
if (depKeys)
|
||||
{
|
||||
NSMapEnumerator enumerator = NSEnumerateMapTable(depKeys);
|
||||
NSString *mainKey;
|
||||
NSHashTable dependents;
|
||||
|
||||
while (NSNextMapEnumeratorPair(&enumerator, (void **)(&mainKey), &dependents))
|
||||
{
|
||||
NSHashEnumerator dependentKeyEnum;
|
||||
NSString *dependentKey;
|
||||
|
||||
if (!dependents) continue;
|
||||
dependentKeyEnum = NSEnumerateHashTable(dependents);
|
||||
while ((dependentKey = NSNextHashEnumeratorItem(&dependentKeyEnum)))
|
||||
{
|
||||
if ([dependentKey isEqual: aKey])
|
||||
{
|
||||
[self overrideSetterFor: mainKey];
|
||||
found = YES;
|
||||
}
|
||||
}
|
||||
NSEndHashTableEnumeration(&dependentKeyEnum);
|
||||
}
|
||||
NSEndMapTableEnumeration(&enumerator);
|
||||
}
|
||||
|
||||
if (!found)
|
||||
{
|
||||
[NSException raise: NSInvalidArgumentException
|
||||
format: @"class not KVC complient for %@", aKey];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1212,13 +1243,16 @@ replacementForInstance(id o)
|
|||
if (keys)
|
||||
{
|
||||
NSHashTable dependents = NSMapGet(keys, aKey);
|
||||
NSString *dependentKey;
|
||||
NSHashEnumerator dependentKeyEnum;
|
||||
|
||||
if (!dependents) return;
|
||||
NSHashEnumerator dependentKeyEnum = NSEnumerateHashTable(dependents);
|
||||
NSString * dependentKey;
|
||||
dependentKeyEnum = NSEnumerateHashTable(dependents);
|
||||
while ((dependentKey = NSNextHashEnumeratorItem(&dependentKeyEnum)))
|
||||
{
|
||||
[self willChangeValueForKey:dependentKey];
|
||||
}
|
||||
NSEndHashTableEnumeration(&dependentKeyEnum);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1228,13 +1262,16 @@ replacementForInstance(id o)
|
|||
if (keys)
|
||||
{
|
||||
NSHashTable dependents = NSMapGet(keys, aKey);
|
||||
NSString *dependentKey;
|
||||
NSHashEnumerator dependentKeyEnum;
|
||||
|
||||
if (!dependents) return;
|
||||
NSHashEnumerator dependentKeyEnum = NSEnumerateHashTable(dependents);
|
||||
NSString * dependentKey;
|
||||
dependentKeyEnum = NSEnumerateHashTable(dependents);
|
||||
while ((dependentKey = NSNextHashEnumeratorItem(&dependentKeyEnum)))
|
||||
{
|
||||
[self didChangeValueForKey:dependentKey];
|
||||
}
|
||||
NSEndHashTableEnumeration(&dependentKeyEnum);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue