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

Reply via email to