Well, thank you to anyone who spared any thought for this problem. After I added the test below, with reconstitutedStructureDict and reconstitutedProj, I discovered that everything started working and the files could be written to and read from disk without error. Then I was able to go back and delete the “reconstituted” test lines, and everything still works. I have no explanation.
-- Charles On Sunday, September 21, 2014 at 19:10, Charles Jenkins wrote: > Just as a test, I changed my writer method to immediately try to interpret > the JSON data and reconstitute the project’s data: > > let structureDict = theProject.getStructureDictionary() > let jsonData = NSJSONSerialization.dataWithJSONObject( structureDict, > options: nil, error: outError ) > if let reconstitutedStructureDict = > NSJSONSerialization.JSONObjectWithData( jsonData!, options: nil, error: > outError ) as? NSDictionary { > var reconstitutedProj = > DocumentNode.readFromWrapperViaStructureDictionary( parentWrapper: > theFileWrapper!, dictionary: reconstitutedStructureDict ) > } > > All this works: reconstitutedStructureDict is a copy of structureDict, and > reconstitutedProj is a copy of theProject. And the JSON file that gets > written out appears okay, so my problem seems to be that > NSFileWrapper.regularFileContents isn’t returning usable data. > > — > > Charles Jenkins > > > On Friday, September 19, 2014 at 11:45 AM, Charles Jenkins wrote: > > > My document structure is a file wrapper containing a bunch of RTF documents > > and a file called structure.json which describes how they relate to one > > another. > > > > I write out the structure file like this: > > > > let structureDict = theProject.getStructureDictionary() > > let jsonData = NSJSONSerialization.dataWithJSONObject( structureDict, > > options: nil, error: outError ) > > > > writeFileToWrapper( > > parentWrapper: theFileWrapper!, > > filename: structureFileName, > > data: jsonData, > > err: outError > > ); > > > > > > I’m not including the bodies of getStructureDictionary() or > > writeFileToWrapper() because they seem to work just fine. The > > structure.json file appears in my output package, and if I open it using > > TextWrangler, I see exactly the JSON content I expect, stored in UTF8 > > encoding. > > > > The thing is, my app can’t read it back in. Here’s the function that’s not > > working: > > > > override func readFromFileWrapper( > > parentWrapper: NSFileWrapper!, > > ofType typeName: String!, > > error outError: NSErrorPointer > > ) -> Bool > > { > > if let fw = parentWrapper.fileWrappers[ structureFileName ] as? > > NSFileWrapper { > > if let data = fw.regularFileContents? { > > let debug: String = NSString( data: data, encoding: > > NSUTF8StringEncoding ) > > let obj: AnyObject? = NSJSONSerialization.JSONObjectWithData( data, > > options: nil, error: outError ) > > if let structureDict = obj as? NSDictionary { > > var proj = DocumentNode.readFromWrapperViaStructureDictionary( > > parentWrapper: parentWrapper, dictionary: structureDict ) > > theProject = proj > > theFileWrapper = parentWrapper > > return true > > } > > } > > } > > return false; > > } > > > > > > I expect I’ll find bugs in readFromWrapperViaStructureDictionary() if I > > ever call it, but I never get that far. > > > > With Swift and Xcode, stepping line-by-line through code it a bit confusing > > because the current line indicator bounces all around, sometimes appearing > > on lines of code already executed. But to be best of my belief, my problem > > is that obj can’t be converted to an NSDictionary. I inserted the debug: > > String to see what’s read from the file, and it comes back as garbage. > > > > Is calling regularFileContents the wrong way to read up my JSON file? > > > > — > > > > Charles Jenkins > > > _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com