From 45e43413bc9e76acce09e159ef7c8f85e7be07be Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Sat, 7 Oct 2023 09:33:00 -0500 Subject: [PATCH 1/3] feat: Export `PFObject` `isDataAvailableForKey` --- Parse/Parse/Internal/Object/PFObjectPrivate.h | 2 -- Parse/Parse/Source/PFObject.h | 7 +++++++ Parse/Parse/Source/PFObject.m | 7 ++++--- Parse/Tests/Unit/ObjectUnitTests.m | 2 +- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/Parse/Parse/Internal/Object/PFObjectPrivate.h b/Parse/Parse/Internal/Object/PFObjectPrivate.h index 70958a667..00cef79d8 100644 --- a/Parse/Parse/Internal/Object/PFObjectPrivate.h +++ b/Parse/Parse/Internal/Object/PFObjectPrivate.h @@ -202,8 +202,6 @@ - (void)setHasBeenFetched:(BOOL)fetched; - (void)_setDeleted:(BOOL)deleted; -- (BOOL)isDataAvailableForKey:(NSString *)key; - - (BOOL)_hasChanges; - (BOOL)_hasOutstandingOperations; - (PFOperationSet *)unsavedChanges; diff --git a/Parse/Parse/Source/PFObject.h b/Parse/Parse/Source/PFObject.h index cb4a14372..be1738c7d 100644 --- a/Parse/Parse/Source/PFObject.h +++ b/Parse/Parse/Source/PFObject.h @@ -399,6 +399,13 @@ NS_REQUIRES_PROPERTY_DEFINITIONS */ @property (nonatomic, assign, readonly, getter=isDataAvailable) BOOL dataAvailable; +/** + Checks whether the `PFObject` has data for given key + + @return `YES` if data is available for given key + */ +- (BOOL)isDataAvailableForKey:(NSString *)key; + #if TARGET_OS_IOS /** diff --git a/Parse/Parse/Source/PFObject.m b/Parse/Parse/Source/PFObject.m index 48c24a801..7fc9b3ed5 100644 --- a/Parse/Parse/Source/PFObject.m +++ b/Parse/Parse/Source/PFObject.m @@ -2146,9 +2146,10 @@ - (void)setObject:(id)object forKeyedSubscript:(NSString *)key { - (id)objectForKey:(NSString *)key { @synchronized (lock) { - PFConsistencyAssert([self isDataAvailableForKey:key], - @"Key \"%@\" has no data. Call fetchIfNeeded before getting its value.", key); - + if (![self isDataAvailableForKey:key]) { + NSLog(@"Key \"%@\" has no data. Call fetchIfNeeded before getting its value.", key); + return nil; + } id result = _estimatedData[key]; if ([key isEqualToString:PFObjectACLRESTKey] && [result isKindOfClass:[PFACL class]]) { PFACL *acl = result; diff --git a/Parse/Tests/Unit/ObjectUnitTests.m b/Parse/Tests/Unit/ObjectUnitTests.m index 56b7333f3..e1cf902ac 100644 --- a/Parse/Tests/Unit/ObjectUnitTests.m +++ b/Parse/Tests/Unit/ObjectUnitTests.m @@ -106,7 +106,7 @@ - (void)testObjectForKey { - (void)testObjectForUnavailableKey { PFObject *object = [PFObject objectWithoutDataWithClassName:@"Yarr" objectId:nil]; - PFAssertThrowsInconsistencyException(object[@"yarr"]); + XCTAssertNil(object[@"yarr"]); } - (void)testSettersWithNilArguments { From be8bc6b7fa63f19c9f43d83cd9641222d517621f Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Thu, 26 Oct 2023 01:08:51 -0500 Subject: [PATCH 2/3] revert object for key change --- Parse/Parse/Source/PFObject.m | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Parse/Parse/Source/PFObject.m b/Parse/Parse/Source/PFObject.m index 7fc9b3ed5..48c24a801 100644 --- a/Parse/Parse/Source/PFObject.m +++ b/Parse/Parse/Source/PFObject.m @@ -2146,10 +2146,9 @@ - (void)setObject:(id)object forKeyedSubscript:(NSString *)key { - (id)objectForKey:(NSString *)key { @synchronized (lock) { - if (![self isDataAvailableForKey:key]) { - NSLog(@"Key \"%@\" has no data. Call fetchIfNeeded before getting its value.", key); - return nil; - } + PFConsistencyAssert([self isDataAvailableForKey:key], + @"Key \"%@\" has no data. Call fetchIfNeeded before getting its value.", key); + id result = _estimatedData[key]; if ([key isEqualToString:PFObjectACLRESTKey] && [result isKindOfClass:[PFACL class]]) { PFACL *acl = result; From e34dbf56d4215caf6838ff4db1bf8c1bc35303e7 Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Thu, 26 Oct 2023 01:11:29 -0500 Subject: [PATCH 3/3] fix test --- Parse/Tests/Unit/ObjectUnitTests.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Parse/Tests/Unit/ObjectUnitTests.m b/Parse/Tests/Unit/ObjectUnitTests.m index e1cf902ac..56b7333f3 100644 --- a/Parse/Tests/Unit/ObjectUnitTests.m +++ b/Parse/Tests/Unit/ObjectUnitTests.m @@ -106,7 +106,7 @@ - (void)testObjectForKey { - (void)testObjectForUnavailableKey { PFObject *object = [PFObject objectWithoutDataWithClassName:@"Yarr" objectId:nil]; - XCTAssertNil(object[@"yarr"]); + PFAssertThrowsInconsistencyException(object[@"yarr"]); } - (void)testSettersWithNilArguments {