Objective c 编码PNG,通过JSON传送到目标C/iOS设备突然不工作

Objective c 编码PNG,通过JSON传送到目标C/iOS设备突然不工作,objective-c,json,ruby-on-rails-4,base64,rabl,Objective C,Json,Ruby On Rails 4,Base64,Rabl,已解决 有一次演习是徒劳的 24小时后才发现逗号放错了地方 @sysMessage.messagePictureData = Base64.strict_encode64(open(imagestring).read), @sysMessage.messagePuzzleNumber = "#{sendPiece}" @sysMessage.messagePictureData = Base64.strict_encode64(open(imagestring).read), @sysMess

已解决


有一次演习是徒劳的

24小时后才发现逗号放错了地方

@sysMessage.messagePictureData = Base64.strict_encode64(open(imagestring).read),
@sysMessage.messagePuzzleNumber = "#{sendPiece}"
@sysMessage.messagePictureData = Base64.strict_encode64(open(imagestring).read),
@sysMessage.messagePuzzleNumber = "#{sendPiece}"
两件事连在一起,浪费了几个小时。感谢那些读过这篇文章的人

更新

我现在似乎有文件被读取和编码“正确”。。。在这方面,我看到了我对编码数据的期望。但我不知道为什么JSON会将数据括在方括号和引号中(并添加另一个值!)

如何让目标C只阅读括号中的第一部分?我画的全是空白

原创帖子

我确信有更好的方法,但我有一个Rails服务器,它对AWS的PNG图像文件进行了编码,并使用RABL将其编码为JSON(以及许多其他数据),然后将其发送到我的iOS设备,并在核心数据中保存为照片

这一切都是工作,但现在它不是,我想知道是否有人可以看看,看看哪里出了问题。不幸的是,我在我的电脑上做了一个捆绑更新,这已经更新了很多gems和Rails本身。叹气因此,我不知道其中一个gem(并且不是一个高度熟练的调试器来尝试和整理它)或我的代码是否有问题

Rails控制器代码:

NSLog(@"I have the message Picture Data as: %@", message[@"messagePictureData");

NSData *photo = [[NSData alloc] initWithBase64EncodedString:message[@"messagePictureData"] options:NSDataBase64DecodingIgnoreUnknownCharacters];

NSLog(@"I have the photo data as: %@", photo);
代码查看AWS上是否有照片。如果有,则查找URL,如果没有图像,则提供占位符图像URL。然后,我需要它来读取文件并将其存储在数据库中,以便交付

if (@photos.approvedMainPhoto == true)
  imagestring = eval "@photos.photoImage#{sendPiece}.url"
else
  imagestring = "#{::Rails.root}/public/images/placeholders/smallimageplaceholder.png"
end

@sysMessage = Message.new
...
@sysMessage.messagePictureData = File.open(imagestring, "r").read,
...
if (@sysMessage.save)
  [true, @sysMessage.id]
else
  [false, 0]
end
RABL代码

我已经去掉了一些代码,但是我已经编码了,如果有图片数据(并且并不总是会有照片),那么就使用Base64.strict_encode64对其进行编码。数据库中保存的用于传输的内容

object false
node(:message) { @code }
node(:number) { @nummessages }
child @messages, :object_root => false do   
    node(:messagePictureData, :if => lambda { |m| m.messageText == ""}) do |m|
            Base64.strict_encode64(m.messagePictureData)
    end
end
这似乎传递了一些信息。当我在XCode控制台中请求输出时。。。我得到类似于:

JSON编码的数据表示:

messagePictureData = "WyJceDg5UE5HXHJcblx1MDAxQVxuXHUwMDAwXHUwMDAwXHUwMDAwXHJJSERSXHUwMDAwXHUwMDAwXHUwMDAwXHhEOFx1MDAwMFx1MDAwMFx1MDAwMFx4RDhcYlx1MDAwNlx1MDAwMFx1MDAwMFx1MDAwMFx4ODkgLVx4RURcdTAwMDBcdTAwMDBcdTAwMDBcdTAwMTl0RVh0U29mdHdhcmVcdTAwMDBBZG9iZSBJbWFnZVJlYWR5cVx4QzllPFx1MDAwMFx1MDAwMDEmSURBVHhceERBXHhFQ1x4OURcdFx4OUNcdTAwMTRceEU1XHg5OVx4RkZceERG6qq .... [LOTS MORE] ... HhDMWJcYT5ceEM1XHhGMlx4RjhceEYwXHhGMlx4OTVcdTAwMTJceEI1XHg4M1x4OTFIXHUwMDA0XHUwMDE4XHg4OURceDgwXHg5MUhceEE0T1x4QzhceEMxNFx4RkFJSCRyMFx1MDAxMmlMXHhFOFx4RkZcdjBcdTAwMDBceEIzXHhBMlx4RkTUuDFceDkyXHUwMDEzXHUwMDAwXHUwMDAwXHUwMDAwXHUwMDAwSUVORFx4QUVCYFx4ODIiLCAiMzAiXQ==";
当我在目标C中执行以下代码时:

目标C代码:

NSLog(@"I have the message Picture Data as: %@", message[@"messagePictureData");

NSData *photo = [[NSData alloc] initWithBase64EncodedString:message[@"messagePictureData"] options:NSDataBase64DecodingIgnoreUnknownCharacters];

NSLog(@"I have the photo data as: %@", photo);
我在控制台中获得以下输出:

I have the photo data as: <5b225c78 3839504e 475c725c 6e5c7530 3031415c 6e5c7530 3030305c 75303030 305c7530 3030305c 72494844 ... [LOTS MORE] ... 3839445c 7838305c 78393148 5c784134 4f5c7843 385c7843 31345c78 46414948 2472305c 75303031 32694c5c 7845385c 7846465c 76305c75 30303030 5c784233 5c784132 5c784644 d4b8315c 7839325c 75303031 335c7530 3030305c 75303030 305c7530 3030305c 75303030 3049454e 445c7841 4542605c 78383222 2c202233 30225d>
我的照片数据如下:
它说它正在将图像保存在核心数据中。然而,我得到的是透明的正方形,而不是照片

而且,每隔一段时间,当它试图从AWS获取一个切片时,我会得到以下日志错误。。。这对我来说也毫无意义

警告:没有这样的文件或目录@rb_sysopen-。。。[更多]

当我将指向Amazon的完整URL放到Safari中时,它完美地显示了照片。唉


任何帮助都会得到感激,因为我又一次被难倒了。

这是一次徒劳的练习

24小时后才发现逗号放错了地方

@sysMessage.messagePictureData = Base64.strict_encode64(open(imagestring).read),
@sysMessage.messagePuzzleNumber = "#{sendPiece}"
@sysMessage.messagePictureData = Base64.strict_encode64(open(imagestring).read),
@sysMessage.messagePuzzleNumber = "#{sendPiece}"
两件事连在一起,浪费了几个小时

感谢那些读过这篇文章的人