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 ([email protected])
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 [email protected]