Alik Rokar
Alik Rokar

Reputation: 1145

__NSDictionaryI setObject:forKey: Crash

The problem is that I am mutating a NSDictionary, but even after getting a mutableCopy, the app crashes.

Below is Method for copy :

+ (NSMutableDictionary *)updateQuery:(NSMutableDictionary *)currentQuery toSearchAfterAccountPaginationSequence:(NSString *)accountPaginationSequence {

    //try1
    NSMutableDictionary *mutableQuery = [currentQuery mutableCopy];

    //try2 
    NSMutableDictionary *mutableQuery2=[NSMutableDictionary dictionaryWithDictionary:currentQuery];

    //crashes on this line
    mutableQuery[@"where"][@"account_pagination_sequence"] = @{ @"lt" : accountPaginationSequence };

    return mutableQuery;
}

Error Log (the app crashes on a limited amount of devices)

[__NSDictionaryI setObject:forKey:]: unrecognized selector sent to instance

Upvotes: 0

Views: 2698

Answers (1)

Ali Kıran
Ali Kıran

Reputation: 1006

i think this is what you trying to achieve

+ (NSMutableDictionary *)updateQuery:(NSMutableDictionary *)currentQuery toSearchAfterAccountPaginationSequence:(NSString *)accountPaginationSequence {

    //try1
    NSMutableDictionary *mutableQuery = currentQuery.mutableCopy;
    NSMutableDictionary *where =  mutableQuery[@"where"].mutableCopy;

    where[@"account_pagination_sequence"] = @{ @"lt" : accountPaginationSequence };
    mutableQuery[@"where"] =  where;

    return mutableQuery;
}

Edit: In Objective-C calling mutableCopy on objects is not recursive.You need to call mutableCopy in nested objects too.

Upvotes: 2

Related Questions