The exact answer to your question is that you are getting nil because you're using imageNamed: which looks for the image using the given (path) name relative to the bundle root (i.e. the .app directory in the deployed app), whereas you are giving it an absolute path to the document directory.
You can actually use imageNamed to load images from a subdirectory of your bundle.
This requires two things:
that your images are actually in a subdirectory in your deployed bundle, not just a subdirectory or group in your XCode project - since those get collapsed into the root directory.
In other words, you need a "blue group" in XCode (folder reference).
You use a relative path in imageNamed.
So [UIImageView imageNamed:@"subdir/foo"] will load foo.png or foo@2x.png, where these files appear in a "blue" group in XCode called "subdir".
You could use this to also find the image in a subdirectory of your documents, since you know where Documents will be created relative to your bundle, but that's a bit hacky. For loading images from the documents you should use imageWithContentsOfFile: instead of imageNamed:
I got sick of looking for the answer to this kind of thing and did some testing, and detailed this and the rest of the results (with pictures!) in an answer to this question:
UIImage imageNamed requires pathForResource?