@@ -797,11 +797,6 @@ - (BOOL)isDataAvailableForKey:(NSString *)key {
797
797
#pragma mark - Validations
798
798
// /--------------------------------------
799
799
800
- // Validations that are done on delete. For now, there is nothing.
801
- - (void )checkDeleteParams {
802
- return ;
803
- }
804
-
805
800
// Validations that are done on save. For now, there is nothing.
806
801
- (void )_checkSaveParametersWithCurrentUser : (PFUser *)currentUser {
807
802
return ;
@@ -1527,8 +1522,6 @@ - (BFTask *)fetchAsync:(BFTask *)toAwait {
1527
1522
}
1528
1523
1529
1524
- (BFTask *)deleteAsync : (BFTask *)toAwait {
1530
- [self checkDeleteParams ];
1531
-
1532
1525
PFCurrentUserController *controller = [[self class ] currentUserController ];
1533
1526
return [[controller getCurrentUserSessionTokenAsync ] continueWithBlock: ^id (BFTask *task) {
1534
1527
NSString *sessionToken = task.result ;
@@ -1564,11 +1557,7 @@ - (PFRESTCommand *)_constructSaveCommandForChanges:(PFOperationSet *)changes
1564
1557
}
1565
1558
1566
1559
- (PFRESTCommand *)_currentDeleteCommandWithSessionToken : (NSString *)sessionToken {
1567
- @synchronized (lock) {
1568
- [self checkDeleteParams ];
1569
- return [PFRESTObjectCommand deleteObjectCommandForObjectState: self ._state
1570
- withSessionToken: sessionToken];
1571
- }
1560
+ return [PFRESTObjectCommand deleteObjectCommandForObjectState: self ._state withSessionToken: sessionToken];
1572
1561
}
1573
1562
1574
1563
// /--------------------------------------
@@ -1793,9 +1782,24 @@ + (PFObjectState *)_newObjectStateWithParseClassName:(NSString *)className
1793
1782
return [PFObjectState stateWithParseClassName: className objectId: objectId isComplete: complete];
1794
1783
}
1795
1784
1796
- #pragma mark Validation
1785
+ // /--------------------------------------
1786
+ #pragma mark - Validation
1787
+ // /--------------------------------------
1797
1788
1798
- - (BFTask *)_validateSaveEventuallyAsync {
1789
+ - (BFTask PF_GENERIC (PFVoid) *)_validateFetchAsync {
1790
+ if (!self._state .objectId ) {
1791
+ NSError *error = [PFErrorUtilities errorWithCode: kPFErrorMissingObjectId
1792
+ message: @" Can't fetch an object that hasn't been saved to the server." ];
1793
+ return [BFTask taskWithError: error];
1794
+ }
1795
+ return [BFTask taskWithResult: nil ];
1796
+ }
1797
+
1798
+ - (BFTask PF_GENERIC (PFVoid) *)_validateDeleteAsync {
1799
+ return [BFTask taskWithResult: nil ];
1800
+ }
1801
+
1802
+ - (BFTask PF_GENERIC (PFVoid) *)_validateSaveEventuallyAsync {
1799
1803
return [BFTask taskWithResult: nil ];
1800
1804
}
1801
1805
@@ -2002,9 +2006,10 @@ - (void)saveEventually:(PFBooleanResultBlock)block {
2002
2006
- (BFTask *)deleteEventually {
2003
2007
return [[[_eventuallyTaskQueue enqueue: ^BFTask *(BFTask *toAwait) {
2004
2008
NSString *sessionToken = [PFUser currentSessionToken ];
2005
- return [toAwait continueAsyncWithBlock: ^id (BFTask *task) {
2009
+ return [[toAwait continueAsyncWithBlock: ^id (BFTask *task) {
2010
+ return [self _validateDeleteAsync ];
2011
+ }] continueWithSuccessBlock: ^id (BFTask *task) {
2006
2012
@synchronized (lock) {
2007
- [self checkDeleteParams ];
2008
2013
_deletingEventually += 1 ;
2009
2014
2010
2015
PFOfflineStore *store = [Parse _currentManager ].offlineStore ;
@@ -2462,12 +2467,18 @@ + (BOOL)deleteAll:(NSArray *)objects error:(NSError **)error {
2462
2467
NSArray *uniqueObjects = [PFObjectBatchController uniqueObjectsArrayFromArray: deleteObjects usingFilter: ^BOOL (PFObject *object) {
2463
2468
return (object.objectId != nil );
2464
2469
}];
2465
- [uniqueObjects makeObjectsPerformSelector: @selector (checkDeleteParams )]; // TODO: (nlutsenko) Make it async?
2466
- return [self _enqueue: ^BFTask *(BFTask *toAwait) {
2467
- return [toAwait continueAsyncWithBlock: ^id (BFTask *task) {
2468
- return [[self objectBatchController ] deleteObjectsAsync: uniqueObjects withSessionToken: sessionToken];
2469
- }];
2470
- } forObjects: uniqueObjects];
2470
+ NSMutableArray PF_GENERIC (BFTask <PFVoid> *) *validationTasks = [NSMutableArray array ];
2471
+ for (PFObject *object in uniqueObjects) {
2472
+ [validationTasks addObject: [object _validateDeleteAsync ]];
2473
+ }
2474
+ return [[BFTask taskForCompletionOfAllTasks: validationTasks] continueWithSuccessBlock: ^id (BFTask *task) {
2475
+ return [self _enqueue: ^BFTask *(BFTask *toAwait) {
2476
+ return [toAwait continueAsyncWithBlock: ^id (BFTask *task) {
2477
+ return [[self objectBatchController ] deleteObjectsAsync: uniqueObjects
2478
+ withSessionToken: sessionToken];
2479
+ }];
2480
+ } forObjects: uniqueObjects];
2481
+ }];
2471
2482
}] continueWithSuccessResult: @YES ];
2472
2483
}
2473
2484
0 commit comments