@@ -798,11 +798,6 @@ - (BOOL)isDataAvailableForKey:(NSString *)key {
798798#pragma mark - Validations
799799// /--------------------------------------
800800
801- // Validations that are done on delete. For now, there is nothing.
802- - (void )checkDeleteParams {
803- return ;
804- }
805-
806801// Validations that are done on save. For now, there is nothing.
807802- (void )_checkSaveParametersWithCurrentUser : (PFUser *)currentUser {
808803 return ;
@@ -1531,8 +1526,6 @@ - (BFTask *)fetchAsync:(BFTask *)toAwait {
15311526}
15321527
15331528- (BFTask *)deleteAsync : (BFTask *)toAwait {
1534- [self checkDeleteParams ];
1535-
15361529 PFCurrentUserController *controller = [[self class ] currentUserController ];
15371530 return [[controller getCurrentUserSessionTokenAsync ] continueWithBlock: ^id (BFTask *task) {
15381531 NSString *sessionToken = task.result ;
@@ -1568,11 +1561,7 @@ - (PFRESTCommand *)_constructSaveCommandForChanges:(PFOperationSet *)changes
15681561}
15691562
15701563- (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];
15761565}
15771566
15781567// /--------------------------------------
@@ -1797,9 +1786,24 @@ + (PFObjectState *)_newObjectStateWithParseClassName:(NSString *)className
17971786 return [PFObjectState stateWithParseClassName: className objectId: objectId isComplete: complete];
17981787}
17991788
1800- #pragma mark Validation
1789+ // /--------------------------------------
1790+ #pragma mark - Validation
1791+ // /--------------------------------------
18011792
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 {
18031807 return [BFTask taskWithResult: nil ];
18041808}
18051809
@@ -2012,9 +2016,10 @@ - (void)saveEventually:(PFBooleanResultBlock)block {
20122016- (BFTask *)deleteEventually {
20132017 return [[[_eventuallyTaskQueue enqueue: ^BFTask *(BFTask *toAwait) {
20142018 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) {
20162022 @synchronized (lock) {
2017- [self checkDeleteParams ];
20182023 _deletingEventually += 1 ;
20192024
20202025 PFOfflineStore *store = [Parse _currentManager ].offlineStore ;
@@ -2472,12 +2477,18 @@ + (BOOL)deleteAll:(NSArray *)objects error:(NSError **)error {
24722477 NSArray *uniqueObjects = [PFObjectBatchController uniqueObjectsArrayFromArray: deleteObjects usingFilter: ^BOOL (PFObject *object) {
24732478 return (object.objectId != nil );
24742479 }];
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+ }];
24812492 }] continueWithSuccessResult: @YES ];
24822493}
24832494
0 commit comments