@@ -798,11 +798,6 @@ - (BOOL)isDataAvailableForKey:(NSString *)key {
798
798
#pragma mark - Validations
799
799
// /--------------------------------------
800
800
801
- // Validations that are done on delete. For now, there is nothing.
802
- - (void )checkDeleteParams {
803
- return ;
804
- }
805
-
806
801
// Validations that are done on save. For now, there is nothing.
807
802
- (void )_checkSaveParametersWithCurrentUser : (PFUser *)currentUser {
808
803
return ;
@@ -1531,8 +1526,6 @@ - (BFTask *)fetchAsync:(BFTask *)toAwait {
1531
1526
}
1532
1527
1533
1528
- (BFTask *)deleteAsync : (BFTask *)toAwait {
1534
- [self checkDeleteParams ];
1535
-
1536
1529
PFCurrentUserController *controller = [[self class ] currentUserController ];
1537
1530
return [[controller getCurrentUserSessionTokenAsync ] continueWithBlock: ^id (BFTask *task) {
1538
1531
NSString *sessionToken = task.result ;
@@ -1568,11 +1561,7 @@ - (PFRESTCommand *)_constructSaveCommandForChanges:(PFOperationSet *)changes
1568
1561
}
1569
1562
1570
1563
- (PFRESTCommand *)_currentDeleteCommandWithSessionToken : (NSString *)sessionToken {
1571
- @synchronized (lock) {
1572
- [self checkDeleteParams ];
1573
- return [PFRESTObjectCommand deleteObjectCommandForObjectState: self ._state
1574
- withSessionToken: sessionToken];
1575
- }
1564
+ return [PFRESTObjectCommand deleteObjectCommandForObjectState: self ._state withSessionToken: sessionToken];
1576
1565
}
1577
1566
1578
1567
// /--------------------------------------
@@ -1797,9 +1786,24 @@ + (PFObjectState *)_newObjectStateWithParseClassName:(NSString *)className
1797
1786
return [PFObjectState stateWithParseClassName: className objectId: objectId isComplete: complete];
1798
1787
}
1799
1788
1800
- #pragma mark Validation
1789
+ // /--------------------------------------
1790
+ #pragma mark - Validation
1791
+ // /--------------------------------------
1801
1792
1802
- - (BFTask *)_validateSaveEventuallyAsync {
1793
+ - (BFTask PF_GENERIC (PFVoid) *)_validateFetchAsync {
1794
+ if (!self._state .objectId ) {
1795
+ NSError *error = [PFErrorUtilities errorWithCode: kPFErrorMissingObjectId
1796
+ message: @" Can't fetch an object that hasn't been saved to the server." ];
1797
+ return [BFTask taskWithError: error];
1798
+ }
1799
+ return [BFTask taskWithResult: nil ];
1800
+ }
1801
+
1802
+ - (BFTask PF_GENERIC (PFVoid) *)_validateDeleteAsync {
1803
+ return [BFTask taskWithResult: nil ];
1804
+ }
1805
+
1806
+ - (BFTask PF_GENERIC (PFVoid) *)_validateSaveEventuallyAsync {
1803
1807
return [BFTask taskWithResult: nil ];
1804
1808
}
1805
1809
@@ -2012,9 +2016,10 @@ - (void)saveEventually:(PFBooleanResultBlock)block {
2012
2016
- (BFTask *)deleteEventually {
2013
2017
return [[[_eventuallyTaskQueue enqueue: ^BFTask *(BFTask *toAwait) {
2014
2018
NSString *sessionToken = [PFUser currentSessionToken ];
2015
- return [toAwait continueAsyncWithBlock: ^id (BFTask *task) {
2019
+ return [[toAwait continueAsyncWithBlock: ^id (BFTask *task) {
2020
+ return [self _validateDeleteAsync ];
2021
+ }] continueWithSuccessBlock: ^id (BFTask *task) {
2016
2022
@synchronized (lock) {
2017
- [self checkDeleteParams ];
2018
2023
_deletingEventually += 1 ;
2019
2024
2020
2025
PFOfflineStore *store = [Parse _currentManager ].offlineStore ;
@@ -2472,12 +2477,18 @@ + (BOOL)deleteAll:(NSArray *)objects error:(NSError **)error {
2472
2477
NSArray *uniqueObjects = [PFObjectBatchController uniqueObjectsArrayFromArray: deleteObjects usingFilter: ^BOOL (PFObject *object) {
2473
2478
return (object.objectId != nil );
2474
2479
}];
2475
- [uniqueObjects makeObjectsPerformSelector: @selector (checkDeleteParams )]; // TODO: (nlutsenko) Make it async?
2476
- return [self _enqueue: ^BFTask *(BFTask *toAwait) {
2477
- return [toAwait continueAsyncWithBlock: ^id (BFTask *task) {
2478
- return [[self objectBatchController ] deleteObjectsAsync: uniqueObjects withSessionToken: sessionToken];
2479
- }];
2480
- } forObjects: uniqueObjects];
2480
+ NSMutableArray PF_GENERIC (BFTask <PFVoid> *) *validationTasks = [NSMutableArray array ];
2481
+ for (PFObject *object in uniqueObjects) {
2482
+ [validationTasks addObject: [object _validateDeleteAsync ]];
2483
+ }
2484
+ return [[BFTask taskForCompletionOfAllTasks: validationTasks] continueWithSuccessBlock: ^id (BFTask *task) {
2485
+ return [self _enqueue: ^BFTask *(BFTask *toAwait) {
2486
+ return [toAwait continueAsyncWithBlock: ^id (BFTask *task) {
2487
+ return [[self objectBatchController ] deleteObjectsAsync: uniqueObjects
2488
+ withSessionToken: sessionToken];
2489
+ }];
2490
+ } forObjects: uniqueObjects];
2491
+ }];
2481
2492
}] continueWithSuccessResult: @YES ];
2482
2493
}
2483
2494
0 commit comments