Re: NSDocument custom file Package or URL override?

2013-05-17 Thread Markus Spoettl

On 5/17/13 8:11 AM, Trygve Inda wrote:

One issue is that when opening my document (the package may contain several
thousand files) I only really need to load one file (the plist) and then
there rest of the files are images that are only read as needed... So I will
need to have my doc keep a reference to the package location to read these
images outside of the normal save/read methods.

In looking at the docs:

- (BOOL)readFromURL:(NSURL *)absoluteURL ofType:(NSString *)typeName
error:(NSError **)outError

  it says " Sets the contents of this document by reading from a file or file
package, of a specified type, located by a URL."

So this seems to work for document packages too??


Yes, sure, but:

An alternative is to hold on to the packages sub-wrappers and read their content 
on demand only. No one forces you to load the wrappers' contents at the time 
your document is opened, so you would only actually load your plist and keep the 
other wrappers around.


That also gives you to possibility to reuse the wrappers when you need to save 
your document. When you reuse an "old" wrapper (say because the content of the 
file the wrapper represents didn't change), it dramatically shortens the time 
needed to save the document - if you have many files to save and/or if they are 
big. That's because the content won't be written twice, the system just creates 
a hard link to the original file on the disk.


Regards
Markus
--
__
Markus Spoettl
___

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


Re: NSDocument custom file Package or URL override?

2013-05-16 Thread Trygve Inda
> On 5/15/13 5:14 PM, Trygve Inda wrote:
>> My document format needs to look like:
>> 
>> File (actually a directory marked as a package)
>> -- MyData.plist
>> -> Images (directory)
>> > Image1.png
>> > Image2.png
>> -> Data (directory)
>> > Data1.dat
>> > Data2.dat
>> -> Icons (directory)
>> > Icon1.png
>> > Icon1.png
>> 
>> 
>> In my NSDocument subclass, Overriding:
>> 
>> - (BOOL)readFromFileWrapper:(NSFileWrapper *)fileWrapper
>> ofType:(NSString *)typeName error:(NSError **)outError
>> 
>> Doesn't seem to be the right thing to do since it seems to want to put all
>> the files in a single flat directory within the package
> 
> It's the right place. You'll get a filewrapper representing the
> document-package 
> directory (the root). From there, you can query the root wrapper for
> sub-wrappers using -fileWrappers (use -isDirectory and -isRegularFile to find
> out if a wrapper contains other wrappers).
> 
> For writing the document, you'll overwrite -fileWrapperOfType:error: and
> return 
> a root wrapper that contains your entire package structure. You can construct
> the interior of your package format to your liking, you can also add
> directories 
> by adding a file wrapper that represents a directory - created via
> -initDirectoryWithFileWrappers:
> 
> The NSDocument guide contains a section about using wrappers and demos the
> basics:
> 
> http://developer.apple.com/library/mac/#documentation/DataManagement/Conceptua
> l/DocBasedAppProgrammingGuideForOSX/AdvancedTopics/AdvancedTopics.html
> 
> Regards
> Markus

One issue is that when opening my document (the package may contain several
thousand files) I only really need to load one file (the plist) and then
there rest of the files are images that are only read as needed... So I will
need to have my doc keep a reference to the package location to read these
images outside of the normal save/read methods.

In looking at the docs:

- (BOOL)readFromURL:(NSURL *)absoluteURL ofType:(NSString *)typeName
error:(NSError **)outError

 it says " Sets the contents of this document by reading from a file or file
package, of a specified type, located by a URL."

So this seems to work for document packages too??



___

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


Re: NSDocument custom file Package or URL override?

2013-05-15 Thread Markus Spoettl

On 5/15/13 5:14 PM, Trygve Inda wrote:

My document format needs to look like:

File (actually a directory marked as a package)
-- MyData.plist
-> Images (directory)
> Image1.png
> Image2.png
-> Data (directory)
> Data1.dat
> Data2.dat
-> Icons (directory)
> Icon1.png
> Icon1.png


In my NSDocument subclass, Overriding:

- (BOOL)readFromFileWrapper:(NSFileWrapper *)fileWrapper
ofType:(NSString *)typeName error:(NSError **)outError

Doesn't seem to be the right thing to do since it seems to want to put all
the files in a single flat directory within the package


It's the right place. You'll get a filewrapper representing the document-package 
directory (the root). From there, you can query the root wrapper for 
sub-wrappers using -fileWrappers (use -isDirectory and -isRegularFile to find 
out if a wrapper contains other wrappers).


For writing the document, you'll overwrite -fileWrapperOfType:error: and return 
a root wrapper that contains your entire package structure. You can construct 
the interior of your package format to your liking, you can also add directories 
by adding a file wrapper that represents a directory - created via 
-initDirectoryWithFileWrappers:


The NSDocument guide contains a section about using wrappers and demos the 
basics:

http://developer.apple.com/library/mac/#documentation/DataManagement/Conceptual/DocBasedAppProgrammingGuideForOSX/AdvancedTopics/AdvancedTopics.html

Regards
Markus
--
__
Markus Spoettl
___

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


NSDocument custom file Package or URL override?

2013-05-15 Thread Trygve Inda
My document format needs to look like:

File (actually a directory marked as a package)
-- MyData.plist
-> Images (directory)
> Image1.png
> Image2.png
-> Data (directory)
> Data1.dat
> Data2.dat
-> Icons (directory)
> Icon1.png
> Icon1.png


In my NSDocument subclass, Overriding:

- (BOOL)readFromFileWrapper:(NSFileWrapper *)fileWrapper
ofType:(NSString *)typeName error:(NSError **)outError

Doesn't seem to be the right thing to do since it seems to want to put all
the files in a single flat directory within the package

Overriding:

-(BOOL)readFromURL:(NSURL *)inAbsoluteURL
ofType:(NSString *)inTypeName error:(NSError **)outError

This seems a bit better but seems designed to read from a single file... Can
that file be my directory/package.

What is the best way to do this?




___

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