質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

2081閲覧

ios モジュールで落ちる

a_ya

総合スコア32

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2015/03/20 11:53

xcode 6.2
iOS 8.1
MAC OS 10.10.2

ELCImagePickerにて上記環境で実機転送した際、写真を150枚くらい選択すると落ちます。エミュでは落ちません。
メモリー関連だとは思うのですが、対策をご教授お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

メモリ不足で落ちているときは直前のログにReceived memory warningと出るのでまずそれを確認してください。
メモリ不足だとすれば、同じ症状がGitHubのissueに上がっており、解決法も提示されているので、まずはそれらを試してみてはいかがでしょうか。

Crash when you select 30 images · Issue #36 · B-Sides/ELCImagePickerController

Crashed when selecting more than 100 images from photo library · Issue #50 · B-Sides/ELCImagePickerController

投稿2015/03/20 15:03

Mitsuyoshi

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

a_ya

2015/03/21 07:02

Mitsuyoshi 様 ご回答ありがとうございます。 ご指摘のように「Received memory warning」が出るときもあれば Xcodeでメモリー足りないよ的なアラートポップアップされる場合もあったりです。 ご提示頂きましたのは目を通しておりましたがソースコードがELCimagePickerでもバージョンが違うのか 修正箇所の該当コードが見当たらずでまた、英語読解力に乏しくスルーしておりました。 今回のMitsuyoshi 様のご回答を元に再度挑戦しました。 同じように悩まれる方がいらっしゃれば参考になると思いますので、その内容を記しておきます。 GitHubにある情報---------------以下 1.Comment out the following line in ELCImagePickerController.m // Do not hold images in the array - crashes when several large images are selected // [workingDictionary setObject:[UIImage imageWithCGImage:[[asset defaultRepresentation] fullResolutionImage]] forKey:@"UIImagePickerControllerOriginalImage"]; 2.In your implementation of - (void)elcImagePickerController:(ELCImagePickerController *)picker didFinishPickingMediaWithInfo:(NSArray *)info, do the following: ---------------------------ここまで 当方の環境で上記1のコードがありませんでした。(バージョンによるものかも?) 原因はNSMutableArrayへUIImageの画像データそのものをpushしており、大量の画像選択または 複数大量選択にてオーバーフローしていると思われる。 対策として選択したものをBLOBのように扱わずasset URLだけ返すようにして、実装側の方で上記2にある メソッド内で取得したasset URLに対して保存とか、表示などの処理を行うようにします。 一応、私の環境でELCImagePickerController.mの該当部分のメソッッドを掲載しておきます。 - (void)selectedAssets:(NSArray *)assets { NSMutableArray *returnArray = [[NSMutableArray alloc] init]; for(ELCAsset *elcasset in assets) { ALAsset *asset = elcasset.asset; id obj = [asset valueForProperty:ALAssetPropertyType]; if (!obj) { continue; } NSMutableDictionary *workingDictionary = [[NSMutableDictionary alloc] init]; CLLocation* wgs84Location = [asset valueForProperty:ALAssetPropertyLocation]; if (wgs84Location) { [workingDictionary setObject:wgs84Location forKey:ALAssetPropertyLocation]; } [workingDictionary setObject:obj forKey:UIImagePickerControllerMediaType]; //This method returns nil for assets from a shared photo stream that are not yet available locally. If the asset becomes available in the future, an ALAssetsLibraryChangedNotification notification is posted. ALAssetRepresentation *assetRep = [asset defaultRepresentation]; if(assetRep != nil) { /*ここから if (_returnsImage) { CGImageRef imgRef = nil; //defaultRepresentation returns image as it appears in photo picker, rotated and sized, //so use UIImageOrientationUp when creating our image below. UIImageOrientation orientation = UIImageOrientationUp; if (_returnsOriginalImage) { imgRef = [assetRep fullResolutionImage]; orientation = [assetRep orientation]; } else { imgRef = [assetRep fullScreenImage]; } UIImage *img = [UIImage imageWithCGImage:imgRef scale:1.0f orientation:orientation]; //[workingDictionary setObject:img forKey:UIImagePickerControllerOriginalImage]; } ここまでコメントアウト */ [workingDictionary setObject:[[asset valueForProperty:ALAssetPropertyURLs] valueForKey:[[[asset valueForProperty:ALAssetPropertyURLs] allKeys] objectAtIndex:0]] forKey:UIImagePickerControllerReferenceURL]; [returnArray addObject:workingDictionary]; } } if (_imagePickerDelegate != nil && [_imagePickerDelegate respondsToSelector:@selector(elcImagePickerController:didFinishPickingMediaWithInfo:)]) { [_imagePickerDelegate performSelector:@selector(elcImagePickerController:didFinishPickingMediaWithInfo:) withObject:self withObject:returnArray]; } else { [self popToRootViewControllerAnimated:NO]; } } 最後にMitsuyoshi 様、本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問