diff --git a/Parse/Parse/Source/PFObject.h b/Parse/Parse/Source/PFObject.h index be1738c7d..9f89866d7 100644 --- a/Parse/Parse/Source/PFObject.h +++ b/Parse/Parse/Source/PFObject.h @@ -880,6 +880,19 @@ NS_REQUIRES_PROPERTY_DEFINITIONS withName:(NSString *)name block:(nullable PFBooleanResultBlock)block; +///-------------------------------------- +#pragma mark - Serialization +///-------------------------------------- + +/** + Creates a PFObject from a dictionary object. + + @param dictionary Undecoded dictionary. + @param defaultClassName The className of the resulting object if none is given by the dictionary. + */ ++ (id)fromDictionary:(NSDictionary *)dictionary + defaultClassName:(NSString *)defaultClassName; + @end NS_ASSUME_NONNULL_END diff --git a/Parse/Parse/Source/PFObject.m b/Parse/Parse/Source/PFObject.m index 48c24a801..11e97e3bf 100644 --- a/Parse/Parse/Source/PFObject.m +++ b/Parse/Parse/Source/PFObject.m @@ -809,6 +809,13 @@ - (BOOL)resolveLocalId:(NSError *__autoreleasing*)error { return YES; } ++ (id)fromDictionary:(NSDictionary *)dictionary + defaultClassName:(NSString *)defaultClassName { + return [self _objectFromDictionary:dictionary + defaultClassName:defaultClassName + completeData:YES]; +} + + (id)_objectFromDictionary:(NSDictionary *)dictionary defaultClassName:(NSString *)defaultClassName completeData:(BOOL)completeData { diff --git a/Parse/Tests/Unit/ObjectUnitTests.m b/Parse/Tests/Unit/ObjectUnitTests.m index 56b7333f3..8c95f0f78 100644 --- a/Parse/Tests/Unit/ObjectUnitTests.m +++ b/Parse/Tests/Unit/ObjectUnitTests.m @@ -361,4 +361,13 @@ -(void)testLocalRESTEncoding { XCTAssertNil(error); } +- (void)testFromDictionary { + NSDictionary *dict = @{ @"objectId": @"XYZ", @"score" : @1.0 }; + PFObject *object = [PFObject fromDictionary:dict + defaultClassName:@"Test"]; + + XCTAssertEqualObjects(dict[@"objectId"], object.objectId); + XCTAssertEqualObjects(dict[@"score"], object[@"score"]); +} + @end