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