Ios 如何重写St:Obj:Foundation方法(在基础框架中)

Ios 如何重写St:Obj:Foundation方法(在基础框架中),ios,objective-c,nsmutabledictionary,Ios,Objective C,Nsmutabledictionary,当在字典中设置nil值时,它将崩溃。 下面是代码 NSMutableDictionary *dic = [@{} mutableCopy]; [dic setObject:nil forKey:@"test"]; 此代码将崩溃。那么有没有一种方法可以覆盖setObject:forKey:使其在传递nil时不会崩溃,就像这样:[dic setObject:nil-forKey:@“test”] 有人能帮我解决这个问题吗?不管怎样,你都想逃出车祸。正确的?为此,您应该在try catch块中编写代

当在字典中设置nil值时,它将崩溃。 下面是代码

NSMutableDictionary *dic = [@{} mutableCopy];
[dic setObject:nil forKey:@"test"];
此代码将崩溃。那么有没有一种方法可以覆盖setObject:forKey:使其在传递nil时不会崩溃,就像这样:
[dic setObject:nil-forKey:@“test”]


有人能帮我解决这个问题吗?

不管怎样,你都想逃出车祸。正确的?为此,您应该在try catch块中编写代码

@try {
    NSMutableDictionary *dic = [@{} mutableCopy];
    [dic setObject:nil forKey:@"test"];
}
@catch (NSException *exception) {
    NSLog(@"%@",exception.reason);
}
@finally {

} 
//你可以这样做

NSNull *nullValue=[[NSNull alloc]init];//globally decalare
NSMutableDictionary *dic = [@{} mutableCopy];
[dic setObject:dic?dic:nullValue forKey:@"test"];

不管怎么说,你想逃离坠机。正确的?为此,您应该在try catch块中编写代码

@try {
    NSMutableDictionary *dic = [@{} mutableCopy];
    [dic setObject:nil forKey:@"test"];
}
@catch (NSException *exception) {
    NSLog(@"%@",exception.reason);
}
@finally {

} 
//你可以这样做

NSNull *nullValue=[[NSNull alloc]init];//globally decalare
NSMutableDictionary *dic = [@{} mutableCopy];
[dic setObject:dic?dic:nullValue forKey:@"test"];

不管怎么说,你想逃离坠机。正确的?为此,您应该在try catch块中编写代码

@try {
    NSMutableDictionary *dic = [@{} mutableCopy];
    [dic setObject:nil forKey:@"test"];
}
@catch (NSException *exception) {
    NSLog(@"%@",exception.reason);
}
@finally {

} 
//你可以这样做

NSNull *nullValue=[[NSNull alloc]init];//globally decalare
NSMutableDictionary *dic = [@{} mutableCopy];
[dic setObject:dic?dic:nullValue forKey:@"test"];

不管怎么说,你想逃离坠机。正确的?为此,您应该在try catch块中编写代码

@try {
    NSMutableDictionary *dic = [@{} mutableCopy];
    [dic setObject:nil forKey:@"test"];
}
@catch (NSException *exception) {
    NSLog(@"%@",exception.reason);
}
@finally {

} 
//你可以这样做

NSNull *nullValue=[[NSNull alloc]init];//globally decalare
NSMutableDictionary *dic = [@{} mutableCopy];
[dic setObject:dic?dic:nullValue forKey:@"test"];

从NSDictionary的文档中,您不能:

通常,键可以是任何对象(前提是它符合 NSCopying协议(见下文),但请注意,在使用键值时 对键进行编码必须是字符串(请参见键值编码基础)。 键和值都不能为零;如果需要表示null 值,则应使用NSNull


从NSDictionary的文档中,您不能:

通常,键可以是任何对象(前提是它符合 NSCopying协议(见下文),但请注意,在使用键值时 对键进行编码必须是字符串(请参见键值编码基础)。 键和值都不能为零;如果需要表示null 值,则应使用NSNull


从NSDictionary的文档中,您不能:

通常,键可以是任何对象(前提是它符合 NSCopying协议(见下文),但请注意,在使用键值时 对键进行编码必须是字符串(请参见键值编码基础)。 键和值都不能为零;如果需要表示null 值,则应使用NSNull


从NSDictionary的文档中,您不能:

通常,键可以是任何对象(前提是它符合 NSCopying协议(见下文),但请注意,在使用键值时 对键进行编码必须是字符串(请参见键值编码基础)。 键和值都不能为零;如果需要表示null 值,则应使用NSNull


如果仅使用
NSString
实例作为键,则可以安全地使用
NSKeyValueCoding.h
中的下一个类别:

    @interface NSMutableDictionary<KeyType, ObjectType>(NSKeyValueCoding)

    /* Send -setObject:forKey: to the receiver, unless the value is nil, in which case send -removeObjectForKey:.
    */
    - (void)setValue:(nullable ObjectType)value forKey:(NSString *)key;

    @end

请注意,无法覆盖
NSMutableDictionary
的原始
setObject:forKey:
方法。通常,可以使用在类别中旋转的方法来实现这一点。但是
NSMutableDictionary
实际上是类集群。
NSMutableDictionary
的私有子类在幕后完成真正的工作。每个子类都有自己的
setObject:forKey:
实现,因为此方法是原始方法。您可以在

上阅读有关类群集的更多信息。如果您仅使用
NSString
实例作为键,则可以安全地使用
NSKeyValueCoding.h
中的下一个类别:

    @interface NSMutableDictionary<KeyType, ObjectType>(NSKeyValueCoding)

    /* Send -setObject:forKey: to the receiver, unless the value is nil, in which case send -removeObjectForKey:.
    */
    - (void)setValue:(nullable ObjectType)value forKey:(NSString *)key;

    @end

请注意,无法覆盖
NSMutableDictionary
的原始
setObject:forKey:
方法。通常,可以使用在类别中旋转的方法来实现这一点。但是
NSMutableDictionary
实际上是类集群。
NSMutableDictionary
的私有子类在幕后完成真正的工作。每个子类都有自己的
setObject:forKey:
实现,因为此方法是原始方法。您可以在

上阅读有关类群集的更多信息。如果您仅使用
NSString
实例作为键,则可以安全地使用
NSKeyValueCoding.h
中的下一个类别:

    @interface NSMutableDictionary<KeyType, ObjectType>(NSKeyValueCoding)

    /* Send -setObject:forKey: to the receiver, unless the value is nil, in which case send -removeObjectForKey:.
    */
    - (void)setValue:(nullable ObjectType)value forKey:(NSString *)key;

    @end

请注意,无法覆盖
NSMutableDictionary
的原始
setObject:forKey:
方法。通常,可以使用在类别中旋转的方法来实现这一点。但是
NSMutableDictionary
实际上是类集群。
NSMutableDictionary
的私有子类在幕后完成真正的工作。每个子类都有自己的
setObject:forKey:
实现,因为此方法是原始方法。您可以在

上阅读有关类群集的更多信息。如果您仅使用
NSString
实例作为键,则可以安全地使用
NSKeyValueCoding.h
中的下一个类别:

    @interface NSMutableDictionary<KeyType, ObjectType>(NSKeyValueCoding)

    /* Send -setObject:forKey: to the receiver, unless the value is nil, in which case send -removeObjectForKey:.
    */
    - (void)setValue:(nullable ObjectType)value forKey:(NSString *)key;

    @end

请注意,无法覆盖
NSMutableDictionary
的原始
setObject:forKey:
方法。通常,可以使用在类别中旋转的方法来实现这一点。但是
NSMutableDictionary
实际上是类集群。
NSMutableDictionary
的私有子类在幕后完成真正的工作。每个子类都有自己的
setObject:forKey:
实现,因为此方法是原始方法。您可以在

上阅读有关类群集的更多信息,请尝试setValue:forKey:而不是setObject:forKey:或使用[NSNull null]而不是nil。@HardikShekhat:我可以重写此方法吗?抱歉,可能我的状态不清楚,我的意思是如何重写它?我试图按类别覆盖它,但这个系统框架的方法仍然是我的。有什么办法吗?请尝试setValue:forKey:而不是setObject:forKey:或者使用[NSNull null]而不是nil。@HardikShekhat:我可以覆盖这个方法吗?对不起,也许我的状态不清楚,我的意思是我如何重写它?我试图按类别覆盖它,但这个系统框架的方法仍然是我的。有什么办法吗?请尝试setValue:forKey:而不是setObject:forKey:或者使用[NSNull null]而不是nil。@HardikShekhat:我可以覆盖这个方法吗?对不起,也许我的状态不清楚,我的意思是我如何重写它?我尝试按类别覆盖它,但仍然