         return finalString
     }
 
-    fileprivate func detectAttachmentRemoved(in range:NSRange) {
+    fileprivate func detectAttachmentRemoved(in range: NSRange) {
+        // Ref. #727:
+        // If the delegate is not set, we *Explicitly* do not want to crash here.
+        //
+        guard let delegate = attachmentsDelegate else {
+            return
+        }
+
         textStore.enumerateAttachmentsOfType(MediaAttachment.self, range: range) { (attachment, range, stop) in
-            self.attachmentsDelegate.storage(self, deletedAttachmentWith: attachment.identifier)
+            delegate.storage(self, deletedAttachmentWith: attachment.identifier)
         }
     }
 

                    return
                }

                let replacementAttachment = ImageAttachment(identifier: NSUUID.init().uuidString)
                replacementAttachment.delegate = self
                replacementAttachment.image = image

                let imageURL = attachmentsDelegate.storage(self, urlFor: replacementAttachment)
                replacementAttachment.updateURL(imageURL)

                finalString.addAttribute(NSAttachmentAttributeName, value: replacementAttachment, range: range)

        return attachments
    }


    // MARK: - Public Helpers

    func range<T : NSTextAttachment>(for attachment: T) -> NSRange? {
        var range: NSRange?

