Sent from my iPhone
> On 28 Mar 2017, at 11:41, Quincey Morris > <quinceymor...@rivergatesoftware.com> wrote: > >> On Mar 26, 2017, at 22:04 , Gerriet M. Denkmann <gerri...@icloud.com> wrote: >> >> [ arrayOfStrings writeToFile: “directoryPath/SortedKeys.plist” atomically: >> YES ]; ← pseudo code > > A couple of points about this line of code, assuming that the method > -[NSArray writeToFile:atomically:] is actually being used: > > 1. This method has a YES/NO result, which you really shouldn’t ignore, if you > do. > I use the result to print an error message. But you are right: I should abandon the whole operation in case of error. > 2. This method is a file API with no outError parameter. All such methods > should be regarded as ancient, undesirable to use, and superseded by a newer > method that does have an outError parameter. The fact that there is no newer > method with an outError parameter tells you that Apple has (essentially) > abandoned this method, and that the replacement API requires a different > approach. My guess is that the intended replacement is to convert the NSArray > to a NSData object yourself (through serialization, archiving, or some > similar technique), and then using one of the more modern NSData file writing > methods to get it onto disk. As the array in question contains strings, none of which should contain a \n I was thinking of converting it into a string, which would then written as UTF16 (which would have the further advantage of reducing the size to about 40%). > > 3. Really, don’t use path-based methods any more. Use the URL-based variant. > (In this case, there is one, but it’s also lacking an outError parameter, so > it also should be abandoned.) > > However, none of the above can explain your crash. The symptoms of the crash > indicate that the directory listed a file called “SortedKeys.plist”, but the > file didn’t actually exist (or couldn’t be read), which is on the face of it > pretty weird. That leads me to: > > 4. You might use “atomically: NO” instead of “atomically: YES”. It’s not > clear whether you expect “SortedKeys.plist” to exist already in the > directory, but I’m guessing not, or that you could delete it manually first. > If the file doesn’t exist, and if you change your code to capture and handle > file-write errors properly, then writing atomically doesn’t have any value, > and it may in rare cases turn out to be actively harmful. There probably will exist an old, not up to date version already. > > A successful non-atomic write is an open/write/close sequence. An atomic > write does that to a temp location on the same HFS volume, then does a file > system atomic “swap” operation to exchange the data of the real and temp > files. On a non-local (e.g. network) or non-HFS volume, the file manager may > not have access to an atomic file swap, so might have to simulate with > renames, moves and/or copies. > > So, an atomic file write involves a longer, possibly quite a lot longer, > sequence of file system operations, and it’s not totally outside the bounds > of possibility that there might be some reordering between this sequence and > other sequences, perhaps even the subsequent directory scan that you do. It > doesn’t seem outside the bounds of possibility that the directory scan might > see the directory in a transitional state. > > This is highly speculative, and other people may have reasons to argue that > such a reordering cannot legally take place, but if you use a non-atomic > write you eliminate any possible timing window on the directory scan, I think. I will abandon the atomic write and just rely on the outcome of the write. If it fails I have no interest in this file at all - the old version is useless anyway. > > That doesn’t really touch the “how to debug?” question, to which I don’t know > the answer, except to suggest you play around trying to make the problem more > reproducible. This is my real problem: so far I have seen this error twice - within 250 days. Using the app several times per day. If I could reproduce the error I am confident of fixing it. I was suspecting a relation with sleep - the first time it occurred at 3:00 (computer should be sleeping) the second time at 17:00 (unlikely to be sleeping, but I'm not sure) Thanks for your suggestions! Kind regards Gerriet _______________________________________________ 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