@@ -110,7 +110,7 @@ public struct ParseEncoder {
110110 acl: ParseACL ? = nil ,
111111 batching: Bool = false ,
112112 objectsSavedBeforeThisOne: [ String : PointerType ] ? = nil ,
113- filesSavedBeforeThisOne: [ UUID : ParseFile ] ? = nil ) throws -> Data {
113+ filesSavedBeforeThisOne: [ String : ParseFile ] ? = nil ) throws -> Data {
114114 var keysToSkip = SkipKeys . none. keys ( )
115115 if batching {
116116 keysToSkip = SkipKeys . object. keys ( )
@@ -159,9 +159,9 @@ public struct ParseEncoder {
159159 acl: ParseACL ? = nil ,
160160 collectChildren: Bool ,
161161 objectsSavedBeforeThisOne: [ String : PointerType ] ? ,
162- filesSavedBeforeThisOne: [ UUID : ParseFile ] ? ) throws -> ( encoded: Data ,
163- unique: PointerType ? ,
164- unsavedChildren: [ Encodable ] ) {
162+ filesSavedBeforeThisOne: [ String : ParseFile ] ? ) throws -> ( encoded: Data ,
163+ unique: PointerType ? ,
164+ unsavedChildren: [ Encodable ] ) {
165165 let keysToSkip : Set < String > !
166166 if !Parse. configuration. isRequiringCustomObjectIds {
167167 keysToSkip = SkipKeys . object. keys ( )
@@ -188,7 +188,7 @@ public struct ParseEncoder {
188188 batching: Bool ,
189189 collectChildren: Bool ,
190190 objectsSavedBeforeThisOne: [ String : PointerType ] ? ,
191- filesSavedBeforeThisOne: [ UUID : ParseFile ] ? ) throws -> ( encoded: Data , unique: PointerType ? , unsavedChildren: [ Encodable ] ) {
191+ filesSavedBeforeThisOne: [ String : ParseFile ] ? ) throws -> ( encoded: Data , unique: PointerType ? , unsavedChildren: [ Encodable ] ) {
192192 let keysToSkip : Set < String > !
193193 if !Parse. configuration. isRequiringCustomObjectIds {
194194 keysToSkip = SkipKeys . object. keys ( )
@@ -218,12 +218,11 @@ internal class _ParseEncoder: JSONEncoder, Encoder {
218218 let dictionary : NSMutableDictionary
219219 let skippedKeys : Set < String >
220220 var uniquePointer : PointerType ?
221- var uniqueFiles = Set < ParseFile > ( )
222221 var newObjects = [ Encodable] ( )
223222 var collectChildren = false
224223 var batching = false
225224 var objectsSavedBeforeThisOne : [ String : PointerType ] ?
226- var filesSavedBeforeThisOne : [ UUID : ParseFile ] ?
225+ var filesSavedBeforeThisOne : [ String : ParseFile ] ?
227226 /// The encoder's storage.
228227 var storage : _ParseEncodingStorage
229228 var ignoreSkipKeys = false
@@ -280,7 +279,7 @@ internal class _ParseEncoder: JSONEncoder, Encoder {
280279 collectChildren: Bool ,
281280 uniquePointer: PointerType ? ,
282281 objectsSavedBeforeThisOne: [ String : PointerType ] ? ,
283- filesSavedBeforeThisOne: [ UUID : ParseFile ] ? ) throws -> ( encoded: Data , unique: PointerType ? , unsavedChildren: [ Encodable ] ) {
282+ filesSavedBeforeThisOne: [ String : ParseFile ] ? ) throws -> ( encoded: Data , unique: PointerType ? , unsavedChildren: [ Encodable ] ) {
284283 self . acl = acl
285284 let encoder = _ParseEncoder ( codingPath: codingPath, dictionary: dictionary, skippingKeys: skippedKeys)
286285 encoder. outputFormatting = outputFormatting
@@ -364,7 +363,7 @@ internal class _ParseEncoder: JSONEncoder, Encoder {
364363 if let uniquePointer = self . uniquePointer,
365364 uniquePointer. hasSameObjectId ( as: pointer) {
366365 throw ParseError ( code: . otherCause,
367- message: " Found a circular dependency when encoding. " )
366+ message: " Found a circular dependency when encoding objects. The object: \( pointer ) cannot have the same objectId as: \( uniquePointer ) " )
368367 }
369368 valueToEncode = pointer
370369 } else if let object = value as? Objectable {
@@ -373,7 +372,7 @@ internal class _ParseEncoder: JSONEncoder, Encoder {
373372 if let uniquePointer = self . uniquePointer,
374373 uniquePointer. hasSameObjectId ( as: pointer) {
375374 throw ParseError ( code: . otherCause,
376- message: " Found a circular dependency when encoding. " )
375+ message: " Found a circular dependency when encoding objects. The object: \( pointer ) cannot have the same objectId as: \( uniquePointer ) " )
377376 }
378377 valueToEncode = pointer
379378 } else {
@@ -401,10 +400,6 @@ internal class _ParseEncoder: JSONEncoder, Encoder {
401400 func deepFindAndReplaceParseFiles( _ value: ParseFile ) throws -> Encodable ? {
402401 var valueToEncode : Encodable ?
403402 if value. isSaved {
404- if self . uniqueFiles. contains ( value) {
405- throw ParseError ( code: . otherCause, message: " Found a circular dependency when encoding. " )
406- }
407- self . uniqueFiles. insert ( value)
408403 if !self . collectChildren {
409404 valueToEncode = value
410405 }
@@ -413,13 +408,12 @@ internal class _ParseEncoder: JSONEncoder, Encoder {
413408 if let updatedFile = self . filesSavedBeforeThisOne ? [ value. id] {
414409 valueToEncode = updatedFile
415410 } else {
416- // New object needs to be saved before it can be stored
411+ // New file needs to be saved before it can be stored
417412 self . newObjects. append ( value)
418413 }
419414 } else if let currentFile = self . filesSavedBeforeThisOne ? [ value. id] {
420415 valueToEncode = currentFile
421416 } else if dictionary. count > 0 {
422- // Only top level objects can be saved without a pointer
423417 throw ParseError ( code: . otherCause, message: " Error. Could not resolve unsaved file while encoding. " )
424418 }
425419 }
@@ -1035,7 +1029,7 @@ private class _ParseReferencingEncoder: _ParseEncoder {
10351029 // MARK: - Initialization
10361030
10371031 /// Initializes `self` by referencing the given array container in the given encoder.
1038- init ( referencing encoder: _ParseEncoder , at index: Int , wrapping array: NSMutableArray , skippingKeys: Set < String > , collectChildren: Bool , objectsSavedBeforeThisOne: [ String : PointerType ] ? , filesSavedBeforeThisOne: [ UUID : ParseFile ] ? ) {
1032+ init ( referencing encoder: _ParseEncoder , at index: Int , wrapping array: NSMutableArray , skippingKeys: Set < String > , collectChildren: Bool , objectsSavedBeforeThisOne: [ String : PointerType ] ? , filesSavedBeforeThisOne: [ String : ParseFile ] ? ) {
10391033 self . encoder = encoder
10401034 self . reference = . array( array, index)
10411035 super. init ( codingPath: encoder. codingPath, dictionary: NSMutableDictionary ( ) , skippingKeys: skippingKeys)
@@ -1046,7 +1040,7 @@ private class _ParseReferencingEncoder: _ParseEncoder {
10461040 }
10471041
10481042 /// Initializes `self` by referencing the given dictionary container in the given encoder.
1049- init ( referencing encoder: _ParseEncoder , key: CodingKey , wrapping dictionary: NSMutableDictionary , skippingKeys: Set < String > , collectChildren: Bool , objectsSavedBeforeThisOne: [ String : PointerType ] ? , filesSavedBeforeThisOne: [ UUID : ParseFile ] ? ) {
1043+ init ( referencing encoder: _ParseEncoder , key: CodingKey , wrapping dictionary: NSMutableDictionary , skippingKeys: Set < String > , collectChildren: Bool , objectsSavedBeforeThisOne: [ String : PointerType ] ? , filesSavedBeforeThisOne: [ String : ParseFile ] ? ) {
10501044 self . encoder = encoder
10511045 self . reference = . dictionary( dictionary, key. stringValue)
10521046 super. init ( codingPath: encoder. codingPath, dictionary: dictionary, skippingKeys: skippingKeys)
0 commit comments