トップページ⇒mac
1001コメント350KB

[SDK]iPhoneアプリ開発初心者質問箱34[touch][iPad]

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001名称未設定2013/08/19(月) NY:AN:NY.ANID:ykyhR6cZ0
iPhone, iPod touch用アプリケーションの開発を始めたばかりの初心者向け質問スレ。

■質問する前に■
1. 質問は日本語もしくはObjective-Cで
 質問に質問で返されても逆切れしない。それは質問の仕方が悪いってことだよ。
2. どういう内容であれレスをもらったら報告とお礼の言葉を忘れずに。
 回答者は自分の時間を使って親切で回答してくれています。
3. 回答者は自分も初心者であった事を忘れずに。
4. マルチポスト(複数のスレに同じ質問を書込むこと)は厳禁!
5. 質問は可能な限り具体的に。
 ただ「エラーが出ます」ではエスパーかスタンド使いでなければ答えられません。
 エラー内容をちゃんと書きましょう。
6. わからない部分のコードをコピペすると手っ取り早いです。
7. このスレは無料プログラミング教室ではありません。
 「○○の仕方を教えてください」という質問はなるべく避けてください。
 「自分で調べたけどわからなかった事」を質問するというスタンスを忘れずに。
8. バグを安易にOSや開発環境のせいにしない。
 自分の知識の無さを棚に上げて人のせいにするなんて百年早い。

■関連スレ
iOSアプリ 個人開発者の雑談スレ13
http://anago.2ch.net/test/read.cgi/mac/1369912531/

iPhone iPad iOSプログラミング Part1
http://toro.2ch.net/test/read.cgi/tech/1314086681/

【脱獄】iPhoneのJailbreakアプリ開発スレ
http://anago.2ch.net/test/read.cgi/mac/1337945208/

※前スレ
[SDK]iPhoneアプリ開発初心者質問箱33[touch][iPad]
http://anago.2ch.net/test/read.cgi/mac/1370485786/
0809名称未設定2013/10/09(水) 18:40:34.62ID:aBrrzrTJ0
Xcode5の背景を4みたいに黒くするにはどうすればいいですか?
0810名称未設定2013/10/09(水) 18:53:18.53ID:KqKc3DKD0
>>809
何のことを言っているのかわからないが、
エディターのバックグラウンドなら、Preferences > Fonts&Colors
アプリのバックグラウンドなら、UIVViewControllerのviewのbackgroundColor

共に、Xcode 4 も Xcode 5 も同じなのでこれらとは違うのか??
0811名称未設定2013/10/09(水) 18:57:54.27ID:G9tPFKdY0
developer forumの名前が決められない
0812名称未設定2013/10/09(水) 19:03:36.42ID:8xMQEuzw0
>>805
まずAutoreverseの指定は Must be combined with the UIViewAnimationOptionRepeat option.とあるから
options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat と指定。
で、リピートカウントを追加するのが正しいかな↓
animations:^{ [UIView setAnimationRepeatCount:1.0]; //この行を追加

ただこれでも実機では>>805のようになるので、Autoreverse使わないでcompletionで戻したら?
CGAffineTransform scale = CGAffineTransformMakeScale(1.5,1.5);
[UIView animateWithDuration:0.6
delay:0
options: UIViewAnimationOptionCurveLinear //とりあえずリニア
animations:^{ [view setTransform:scale]; }
completion:^(BOOL finished){

[UIView animateWithDuration:0.6
delay:0
options: UIViewAnimationOptionCurveLinear
animations:^{ view.transform = CGAffineTransformIdentity; }
completion:^(BOOL finished){
}];
}];
0813名称未設定2013/10/09(水) 19:13:00.17ID:aBrrzrTJ0
>>810
ありがとうございます解決しました
エディタの背景色の方です
0814名称未設定2013/10/09(水) 19:50:41.00ID:KyuEvtW1P
>>807 >>812
ありがとうございます。
やってみます!
0815名称未設定2013/10/09(水) 20:03:17.04ID:hRpGUET/P
>>806
iTCは元々楽曲や映画のサブミットシステムだから。
08168002013/10/09(水) 20:23:20.59ID:JFWT/nMl0
>>808
ありがとうございます。
UIImagePickerControllerDelegateの宣言もしていますね。
とりあえずは簡単なプロジェクトを作ってテストしてみようと思います。
0817名称未設定2013/10/09(水) 21:08:00.83ID:pgZgCxqG0
質問です。
カスタムクラスのinitメソッドをオーバーライドして、プロパティの値を使って初期化処理をしたいです。

CustomClass *class = [CustomClass alloc]init];
class.property = hoge;

としても先にinitされていて、その時にプロパティの値を参照して初期化処理をしてしまうので、hogeが反映されません。
かといって

CustomClass *class;
class.property = hoge;
class = [[CustomClass alloc]init];

としてもhogeを入れた時にはclassは存在してないので反映されません。
どうすればいいんでしょうか?
また、UIViewなどのプロパティは初期化の後に変更しても反映されます。
これはどういう仕組なのでしょうか?
0818名称未設定2013/10/09(水) 21:18:39.91ID:8xMQEuzw0
>>817
CustomClassのpropertyのsetterをオーバーライドして、その中で処理。
- (void) setProperty:(int)property { //propertyがintなら
_property = property;
//ここで処理
}
0819名称未設定2013/10/09(水) 23:28:44.25ID:wW6aW5Rt0
>>817
initメソッドの設計が腐ってるからじゃないかな
0820名称未設定2013/10/10(木) 00:16:58.11ID:eCbD3SVp0
initWithProperty:でいいんじゃね
0821名称未設定2013/10/10(木) 00:41:13.13ID:J2xhDY5u0
>>817
こう書けばわかるか?

- (id) initWithValue:(int)value {
self = [super init];
if (self != nil) {
self.value = value;
}
return self;
}

- (void) setValue:(int)value {
_value = value;
//初期化処理
}
0822名称未設定2013/10/10(木) 00:56:30.39ID:Cwj4RjpY0
>>818,821
ありがとうございます
propertyの実体をすっかり忘れてました
0823名称未設定2013/10/10(木) 01:00:43.35ID:7tnjy6Xm0
>>797
やっぱおかしいの?これ

とりあえずインスタンス生成するときは
alloc(メモリ確保)してからって書いてあったから書いたんだが!!!
0824名称未設定2013/10/10(木) 01:10:11.20ID:J2xhDY5u0
+allocと-init系はセットで使う。
+allocでインスタンスを生成(未初期化)した後、+imageNamedでもう一度生成してる。
↓つまりこれだけでええねん。
UIImage *image = [UIImage imageNamed:@"aiu.png"];
[image drawAtPoint:CGPointMake(0, 0)];
0825名称未設定2013/10/10(木) 01:10:28.26ID:eCbD3SVp0
imageNamed:の内部でallocされてる
0826名称未設定2013/10/10(木) 01:32:04.93ID:7tnjy6Xm0
なるほど内部でallocされてたのね
0827名称未設定2013/10/10(木) 04:19:26.40ID:HfktidPb0
>>826
というか、変数に代入する時点で前の値は破棄される(というと語弊がありそうだが…)だろ?
image=[UIImage alloc];
で、imageにUIImageをallocだけしたもの(インスタンスA)を入れて、
image=[UIImage imageNamed:@"aiu.png"];
直後にいきなりAを捨てて、imageNamed:で新たに生成した別のもの(インスタンスB)を入れてる訳だ。
普通に考えておかしいだろ。
image=[UIImage alloc];
した後で、
[image initなんちゃら];
するなら、Aを初期化している訳だから、まだ分かるが、その場合も、
image = [[UIImage alloc] initなんちゃら];とまとめて書くのが普通だ。
ちなみに、imageなんちゃらはコンビニエンスコンストラクタと呼ばれていて、
既にautoreleaseされたインスタンスを返すクラスメソッドだ。
コンビニエンスコンストラクタは、特に言語の仕様として決まっている訳じゃないが、クラスメソッドであり、
NSStringならstringなんちゃら、UIImageならimageなんちゃらと、返すオブジェクトの種類の名前で始まるのが慣例だ。
単にalloc+init+autoreleaseを呼び出して返してるだけのものもあるし、
内部で同じ不変インスタンスを複数作らないように工夫したり、Abstract Factoryパターンを実装しているものもある。
ARCが有効なら、alloc+initしても、コンビニエンスコンストラクタを使っても特にその後の書き方は変わらない。
autoreleaseせずに返すnewなんちゃらというのもあるが、普通は使われない。C++やJavaから来た人にとっては、馴染みがあるのはこっちだろう。
0828名称未設定2013/10/10(木) 15:55:11.97ID:ObTVdm8f0
>>827
お前頭いいな
0829名称未設定2013/10/10(木) 17:43:19.84ID:2K/GuCrs0
しばらくぶりに,アプリをバージョンアップしてアップロードしようとしています。
Xcode5ですが,「Validate... 」をクリックし,iTunes Connectにログインしたあと
「Choose a profile to sign with:」のダイアログで
「No Identities a available for signing」とでます。

そこで
左の「Download・・・」をクリックした後,適切にセレクトして(選択肢は一つですが)
Chooseボタンを押すと落ちてしまいます。

また右の「Import・・・」をクリックした後「DevProfile.developerprofile」ファイルを選択しても
落ちてしまいます。

connect1.apple.com 4.6.*.db
を消すとよいと,どこかのサイトで書いてあったのでそれもやりましたが,ダメでした。

対策を教えてください。
0830名称未設定2013/10/10(木) 21:35:35.52ID:FDFnk54S0
>>828
そういうお前こそ頭が良さそうだ。
0831名称未設定2013/10/10(木) 22:33:44.08ID:owcvtrTYP
@import便利
0832名称未設定2013/10/10(木) 23:35:51.87ID:Jtg271Fj0
アプリ開発用にMacを買いたいのですが、既にPCを持っており、
完全にiOS開発用なので安いのがいいです
やはりMac miniがいいんかな?メモリとSSDは自分で足したら快適になるかな
0833名称未設定2013/10/11(金) 00:25:04.29ID:/BCg64wa0
メモリに関する知識はあまりないんだけど、、、、

とりあえずARCでやっておけば
4GBのパソコンでメモリ不足が起きるってことはありえないって事でおk???
0834名称未設定2013/10/11(金) 00:29:51.18ID:/BCg64wa0
というのも
コーディングしてるときに「アクティビティモニタ」でメモリの状況みたら
緑色の部分(空き部分)がほとんどなくなってたから不安になったんだ。
0835名称未設定2013/10/11(金) 00:36:11.94ID:c5yWQXbB0
4GBなら大丈夫だ。メモリ食うのはSafari
0836名称未設定2013/10/11(金) 00:38:43.92ID:HOYhId340
>>833
メモリリークの心配が「それほど」無くなるというだけ。実際に必要ならARCも何も関係無い
>>834
青い部分が多くを占めているのなら気にしなくてもいい。ファイルキャッシュがそのほとんどだから
赤と黄色が多くを占めているのなら、上のリストでどれがメモリを喰っているのか見るのがいい
0837名称未設定2013/10/11(金) 01:37:03.87ID:4HsA7p/HP
たまにもっさりするけどね
0838名称未設定2013/10/11(金) 03:11:28.19ID:iFvDoypr0
あと10日もするとRetina Air出るからそれ買えば?
1度Mac使うともうWindowsには戻れないよ
0839名称未設定2013/10/11(金) 06:11:54.93ID:Ez3aMcH+0
Airってノート?
ノートで開発すんの?あとMac対Winみたいなくだらん信者合戦やめろや
0840名称未設定2013/10/11(金) 07:42:43.97ID:JBQQryLH0
Miniはそれなりにもっさりするよ
快適に使うならSSDとの交換も視野に入れた方がいいかも
0841名称未設定2013/10/11(金) 07:51:33.45ID:KPxE15hm0
一代前のmac miniメモリ4G持ってるけど、Xcodeもシミュレータも起動時はおっそい。
あとipad retinaのシミュレータは10分経っても動かなかった。

>>839
ノート対デスクトップの争いがしたいのか?時代遅れもいいところだ。
0842名称未設定2013/10/11(金) 09:07:33.83ID:FVk+PQ2PP
SSDは必須。あとは好みでいいよ。
0843名称未設定2013/10/11(金) 10:03:53.29ID:a85exrl10
iMacからMac miniにしようと思ってたんだけどSSDでもモッサリするの?
0844名称未設定2013/10/11(金) 10:06:50.09ID:1PQGOMZ50
どうしてそういう疑問という結論になるのかわからない。話の流れから
0845名称未設定2013/10/11(金) 10:24:54.81ID:a85exrl10
ああ、ちゃんと読んでなかったわ、SSDなら大丈夫か
0846名称未設定2013/10/11(金) 12:00:32.90ID:QAWINqeJ0
Developer Member CenterのIdentifiersのApp IDはいったん登録したものは削除できないですか?
ググったら4月頃に削除できるようになったらしいのですが、削除ボタンが見当たりません。
一度削除できるようになった後に、改悪されて再度削除できなくなったのでしょうか?

App ID削除の情報はこのサイトをみました。
http://mushikago.com/i/?p=2779
08478462013/10/11(金) 13:03:25.48ID:QAWINqeJ0
自己解決しました。やっぱりまた削除できなくなったみたいですね。なんでだろう。

http://impulsiveforever.wordpress.com/2013/04/08/app-id%E3%81%8C%E5%89%8A%E9%99%A4%E5%8F%AF%E8%83%BD%E3%81%AB/
0848名称未設定2013/10/11(金) 13:07:39.12ID:+6tHdhCs0
>>846
削除できるようになっていたとは、知らんかった。
で、今みてみたら、削除しなくても、使っていないやつ(昔間違って作ったもの)は消えていた。。。
0849名称未設定2013/10/11(金) 13:18:27.81ID:zQucQ/5m0
Master-Detail Applicationテンプレートを使ってアプリを作っています。

Master ViewとDetail Viewを繋ぎ遷移出来るようにしたのですが、Detailから
Masterに戻ってくると上部のタイトルが消えています。(デフォルトでMasterと
書かれている所)

Xcode5.0でTableViewはStatic Cellsで作成しています。

どうかご教示願います。。
08504222013/10/11(金) 13:32:06.50ID:zQucQ/5m0
すみません。
Segueの設定をPushではなくModalにしていたせいかもです。
Pushにしたら大丈夫でした….
0851名称未設定2013/10/11(金) 20:08:19.83ID:ymtFO2et0
>>839
(信者合戦もなんもこのスレMacをいま使ってます率100%じゃ…)
0852名称未設定2013/10/11(金) 20:40:03.02ID:Ji6ocrGjP
>>851
(僅かでもAppleやMacを褒めると信者扱いだから、その手のは相手しちゃイカン)
0853名称未設定2013/10/11(金) 22:45:19.06ID:BNe/mAZF0
デリゲートとかよくわかんねえええええwwwww
wっwwするいみあんの?ばろすまん!ってかんじやねん!
0854名称未設定2013/10/11(金) 22:52:29.50ID:c5yWQXbB0
delegate protocol をデリゲートって略すから余計わかんねえんだよ。
プロトコルの仕組みを覚えろ。
0855名称未設定2013/10/11(金) 22:57:37.00ID:DNjnoOJk0
ユーザーが自分のオリジナルクラスにデリゲートをつけることも
Objective-Cの仕様的には可能だが、
そんなおそろしくめんどくさいことをする意味もなく。
あれはApple様が「こういう時になんかさせたいでしょ?」とあらかじめ
既存クラスにわざわざつけてくれている条件分岐点。
「なかったら」なんて考えたくもない。
0856名称未設定2013/10/11(金) 23:16:19.84ID:1PQGOMZ50
>>855
>Objective-Cの仕様的には可能だが、
>そんなおそろしくめんどくさいことをする意味もなく。
ほーっとしか言えないな。これも>>854が言うのを理解できればそんなことは全く無いのだが...

>>853
最初は単なるCallbackだと思えばいいよ。Callbackってなんやねんってのには...まあ「最初は単なるCallbackだと思えばいいよ」は思わない方がいいか...
0857名称未設定2013/10/11(金) 23:25:42.72ID:osKbPlqS0
デリゲートの名前通り処理を委譲するんだよ
それ以上でもそれ以下でもないよ
0858名称未設定2013/10/11(金) 23:35:10.44ID:1PQGOMZ50
ただの通知のようなデリゲートメソッドもあるけどね
0859名称未設定2013/10/11(金) 23:53:22.20ID:E/heBg5o0
デリゲートなんざ古い。
時代はBlocks。
BlocksKit便利だよ。
0860名称未設定2013/10/12(土) 00:14:40.22ID:xqhboEnj0
そもそもc言語みたいに
上からコード書いていって順番に実行されるの形だとすごい分かりやすいけど

iphoneアプリ開発は

オーバライドで実装していくとか、よくいみわからんわ!!
むずかしいんげーとやんわ!!!!11
0861名称未設定2013/10/12(土) 00:17:41.73ID:v8wNWu/c0
んー、イベント駆動型(?)はどれも同じようなもんだけど
形こそ違えどれも同じような機構があるし
先は長いな。頑張れ。愚痴は書かなくていいよw
0862名称未設定2013/10/12(土) 00:24:26.94ID:xqhboEnj0
うるちゃい!
0863名称未設定2013/10/12(土) 00:36:54.68ID:qpiY2Edj0
自分がイベントの主催者だと思えばいい。
スタッフAに、ある仕事をするように言う。
するとスタッフが、仕事をしていてこうなったらどうしたらいいですか、と聞いてくる。
それはそのときになったらBさんに指示を仰いでください、と言う。
スタッフBに、こんなときはAさんにこう指示してください、と言う。
AさんがBさんに指示を仰ぐ、これがまさにデリゲートだ。
0864名称未設定2013/10/12(土) 00:46:05.66ID:H1QXFvaoP
なんという分かりにくさ...
0865名称未設定2013/10/12(土) 00:58:09.45ID:BuF/cxmJ0
わかりやちゅい!!
0866名称未設定2013/10/12(土) 01:05:50.27ID:bdrvgqiV0
>>860
簡単だっつーのw 1.プロトコルに準拠する 2.delegateにselfを突っ込む

例えばUIScrollViewDelegateなら
@interface ViewController : UIViewController <UIScrollViewDelegate> ---(1)

scrollView.delegate = self; ---(2)

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { ---(1)
//こいつがscrollViewから呼ばれる
}

超簡単に言えばこれだけの仕組みだ。(optionalの場合な)
requiredは全部実装すること。

UIButtonのaddTargetってやつにselfとSELを渡すだろ。
あれのセレクタを指定しない版だと思えばいい。
0867名称未設定2013/10/12(土) 02:56:50.04ID:8emYS1li0
>>860
C言語の(外部への影響を無くすため)"関数"ごとに独立した単位にする。ってのを一歩進めて
"クラス"という単位に平文で「こうしろ」という"メッセージ"を送るようにする。
決めたメッセージを解釈して対応するのは各クラスの責任。と決めて役割分離することで
プログラマーが「変数に1が来たら再生、2が来たらストップ、3が来たら巻戻し…」みたいな
『誰が何をどうするとどうなるのかの確認に常に忙殺される』事態を防ぎ
独立したパーツとしてのクラスの独立性を担保し、
さらにはクラスを使い回す時に単純に派生クラスのメッセージに対する
反応を書き換えるだけで振る舞いが変えられるじゃん!というアイデアです。

C++とかがCに"使い回し"の部分だけを即物的に取り入れて混乱が収まらないのと逆に
Objective-Cの基本はわかりやすい平文メッセージで「こうしろ」と
クラスに命令する形にすることで機械や環境に依存する
○○型データ同士の直接やりとりから一歩離れて
クラスの取り回しをもっと手軽にしています。
だから、他言語だと教科書の概念的なもんで現場じゃ使わないだろwww?的な
オブジェクト指向がガスガス使われまくっていて異次元感覚いっぱいです。
がんばれ
0868名称未設定2013/10/12(土) 03:41:17.25ID:MC23hbST0
何本もアプリを作ってきたけどいまだにデリゲートの使い方は分かるけどなんなのかは理解していない
0869名称未設定2013/10/12(土) 03:48:11.82ID:Lk31nuQdi
ProductからArchiveして、OrganizerでValidateすると下記のエラーが出てしまいます。自分の力量不足でググったり調べてみたんですが原因がわかりません、どなたか教えて頂けないでしょうか・・・。

The bundle identifier cannot be changed from the current value, ‘com.自分のbundle identifie’. If you want to change your bundle identifier, you will need to create a new application in iTunes Connect.
0870名称未設定2013/10/12(土) 04:33:12.62ID:3WNJc+uh0
plistのbundle identifierがその値と違うのでは?
0871名称未設定2013/10/12(土) 05:16:37.03ID:Lk31nuQdi
>>870
plistのbundle identifierもAppIDのbundle IDも一致してるのになぜか出るんです・・・。

一応一回弄ってしまったので、今日新しいプロジェクトでAppIDを作成しなおして一致してるのを確認してからValidateしてみたんですがまた同じエラーが出てしまったので原因が他にあるのかと思ったんです・・・
0872名称未設定2013/10/12(土) 08:39:10.13ID:rd5JoqLW0
delegateはそこまで難しい話じゃないよ。

scrollView.delegate = self;
なんてよく書くだろ。

これはUIScrollViewで宣言だけされてる処理を俺のところで使わせてくれって話。
UIScrollViewみたいに自分でdelegateを用意して、誰かに使ってもらうことができる、と考えたらわかりやすい。

自分で用意する場合は、delegateの宣言とdelegateがセットされたら、セットされたdelegateから呼び出すようにしておけばいい。
0873名称未設定2013/10/12(土) 09:34:04.13ID:FdUBLArO0
つか、appleのドキュメント読んでdelegateも理解できないような人間に
ここで書かれた内容を理解できるとは思えないんだが。
仮に理解できたとしても、その先の内容を理解できるかどうか。

しかも本気で取り組んでるとはとても思えない発言に対して、
よくまぁ、親切に教えようとする気になれるな。
0874名称未設定2013/10/12(土) 09:47:19.16ID:qpiY2Edj0
デリゲートってオブジェクト指向さえ理解してれば何も難しくないと思うんだが、
オブジェクト指向が理解できてないととことん訳わからないんだろうなぁ。
まず「俺のところ」「自分」「誰か」っていうのがなんじゃそりゃだと思う。
プログラムが上から下に流れるだけのイメージからオブジェクト指向の脳に切り替えるまでが一苦労。
0875名称未設定2013/10/12(土) 11:10:44.06ID:4piWmW750
そんな開発者さえわかってない仕様を組み込んだアプリをユーザに使わせているのですね(震え声
0876名称未設定2013/10/12(土) 11:30:35.93ID:ytxmwQ7k0
毎度毎度のことだけど、早く出したいのにAppleのレビューが中々始まらない
ここは改善されることはないのかなあ
0877名称未設定2013/10/12(土) 11:59:17.33ID:3FWfQKK20
ここにいる人はアプリ開発でどのくらい稼いだの?

趣味でやってる人と、仕事でもしてる人がいそうだけども
前者の人にききたい
0878名称未設定2013/10/12(土) 12:11:38.03ID:Raah+yjQ0
>>877
3年で約40万円。
まあ初期投資は回収できたかな。
でも、その開発時間を、試験の勉強にでも充てていれば
東大でも入れただろうな。
0879名称未設定2013/10/12(土) 12:28:27.18ID:dfSMG3c60
妄想乙
0880名称未設定2013/10/12(土) 17:43:32.08ID:uP9Ur/ZOP
delegateは最初はさっぱしわからんかったなー。色々いじっていくうちに慣れてきたんだが…半年以上はかかったか?w
頭いいやつが羨ましいぜよ
0881名称未設定2013/10/12(土) 18:25:06.93ID:qpiY2Edj0
UITableViewを例にしてみよう
テーブル表示だから、当然、アプリや画面によって、表示する内容が違うわけだ
その場合によって異なる内容をどうやって変えるか?
方法はいくつも思いつくが、例えば
1. 直接そのオブジェクトに書き込む (例えば、UIViewで背景色なんかを指定するのと同様に、直接メッセージを送って書き換える方法だ)
2. 継承してサブクラスを作る
しかし、1はテーブルビューのように指定する内容が多いとその周辺(普通は、オブジェクトを生成したあたりだろう)
のコードが長くなってしまうし、Blocks(無名関数)や関数ポインタを使わないと複雑な内容は指定できない
Blocksはともかく、Objective-Cで関数ポインタなんてアナクロなモノはできれば使いたくないだろう
2はただ表示内容を書き分けるだけでサブクラスなんか作りたくない、と思うのが普通だろう
サブクラスを作る、ということは、ニアリーイコールで新しいファイルを作り、新しいクラス名をつけるということだ
Javaと違ってファイルを分ける必要は必ずしもないが、クラス名を考えるのは頭が痛いだろう
しかも、クラスにしてしまうと実際に使うところから離れたところに書かざるを得ないこともあり、可読性も落ちる
(もっとも、UITableViewControllerはやってることはほぼ2に近いが・・・)
(つづく)
0882名称未設定2013/10/12(土) 18:26:31.46ID:qpiY2Edj0
(つづき)
そこで、デリゲートの出番だ
いちいちプロパティ等を使って指定したり、継承したりせず、テーブルビューに「あるオブジェクト」を指定して、
テーブルビューがそのオブジェクトから必要なことを知ることができる方法を考えよう
そのために必要なのは
1. 誰に聞くか?
2. 何をどうやって聞くか?
ということだ。1.は、テーブルビューにプロパティとしてその都度指定するようにしよう
テーブルビューの場合は、delegateとdataSource(名前はデータソースだがやってることはデリゲートの一種だ)だ
delegateとdataSourceに、聞く対象のオブジェクトを指定する
大抵は、テーブルビューを作成するビューコントローラだろう
ビューコントローラのメソッドで、テーブルビューtableViewを作成したあと、
tableView.delegate = self;
tableView.dataSource = self;
とすればいいワケだ。この場合のselfはビューコントローラだから、これでテーブルビューは「ビューコントローラに」聞くことができるようになった
UITableViewControllerを継承して使う場合は、既にテーブルビューの作成とdelegate/dataSourceの指定がされているため、これは不要だ
2. で、聞き方をプロトコルとして宣言しておくことになる。これが、UITableViweDelegateとUITableViewDataSourceだ
例えば、UITableViewDataSourceには、
1. tableView:numberOfRowsInSection:とか、
2. tablewView:cellForRowAtIndexPath:
とかがある。1は、あるセクションに含まれる行の数、2は、実際に表示するセルを寄越せ、という意味だ
これらを上で指定したdelegateとdataSourceで実装しておけば、後はテーブルビューがこれらのメッセージを送り(つまり、メソッドを起動するということだ)
必要になったときに行の数やセルを取得して、表示してくれるというワケだ
0883名称未設定2013/10/12(土) 18:46:12.51ID:Gl1pAq8l0
UIAlertViewについての質問です。練習で書いてるのですが
- (IBAction)button:(id)sender {
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"test"
message:@"ok cancel test."
delegate:self
cancelButtonTitle:@"cansel"
otherButtonTitles:@"ok", nil];
[alert show];
}
- (void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:
(NSInteger)buttonIndex{
if (buttonIndex == 1) {
_label.text = @"ok";
} else {
_label.text = @"cancel";
}
}
↑の(buttonIndex == 1)は何についての(どういった意味合いでの)記述なのでしょうか、実際に値をかえてみましたがbuttonを押した後のラベルの表示が入れ変わったりする。としかわかりません
でした。

よろしくお願いします。
0884名称未設定2013/10/12(土) 18:49:30.33ID:UyLpGPKC0
-alertView:clickedButtonAtIndex:はアラートのボタンのどれかがクリックされたときに呼ばれる
実際にどれがクリックされたかはbuttonIndexを見て判断する
0885名称未設定2013/10/12(土) 18:51:10.93ID:UyLpGPKC0
少し足りなかった
クリックされたボタンによって処理を変える必要があるからif文で分岐させてる
0886名称未設定2013/10/12(土) 19:28:18.51ID:FV0BY70D0
UITableViewでCoreDataを使用したアプリで、UISearchDisplayControllerを使用しています。
UISearchDisplayControllerがアクティブじゃない時(検索していないとき)にセルを削除すると、
問題なく削除されますが、
検索中に削除するとクラッシュしてしまいます。
さらに少しコードを直すと、セルのタイトルが、削除したものではないものになってしまいます。

現状では、Searchディスプレイコントローラがアクティブのときはスワイプなどでは削除させないようにして応急処置してあります。
これでも問題ないといえば問題ないのですが、
理想としては、標準純正アプリのメールのように、検索している最中に普通に削除したいです。

いろいろと海外質問サイトやGithubやサンプルコードなどを見たのですが、
UITableViewでCoreDataを使用したアプリで、UISearchDisplayControllerを使用したケースというのが見つかりません。

クラッシュしないで表示も正しくさせるにはどうすればいいのでしょうか?
0887名称未設定2013/10/12(土) 21:20:22.89ID:UyLpGPKC0
クラッシュの原因を調べて対策する
0888名称未設定2013/10/12(土) 21:28:07.26ID:bdrvgqiV0
>>886
エラーメッセージを書かないと誰も検討つかないぞ。
メッセージ出ないで落ちるのか?
0889名称未設定2013/10/12(土) 21:32:08.38ID:4piWmW750
ここでエスパーの出番
0890名称未設定2013/10/12(土) 22:34:44.91ID:G5292nPv0
どうせ NSRangeException だろ
0891名称未設定2013/10/13(日) 08:54:24.47ID:19rrgh000
>>886です。

>>888
こういうエラーメッセージが出ました。
Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-2903.2/UITableView.m:1330
2013-10-13 08:50:01.794 プロジェクト名[16920:a0b] CoreData: error: Serious application error.
An exception was caught from the delegate of NSFetchedResultsController during a call to -controllerDidChangeContent:.
Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (2)
must be equal to the number of rows contained in that section before the update (1), plus or minus the number of rows inserted or deleted from that section (0 inserted,
1 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out). with userInfo (null)
0892名称未設定2013/10/13(日) 12:05:53.36ID:CtSXSeR+0
>>891
section:0 row:0 ←こいつを消そうとして失敗したのかな?
section:1 row:0
section:1 row:1
(section:2 row:0)
:
0893名称未設定2013/10/13(日) 12:21:25.88ID:0m/B40730
http://jacminik.wordpress.com/2010/07/28/study-coredata-19/
こういうのもあるね
0894名称未設定2013/10/13(日) 13:44:06.15ID:19rrgh000
>>892
はい、Searchディスプレイコントローラのテーブルビューでは0:0で、
実際のself.tableviewでは0:3です。
0895名称未設定2013/10/13(日) 14:24:12.05ID:19rrgh000
レスくれた方ありがとうございます。
原因は何なんですかね?
0896名称未設定2013/10/13(日) 21:51:51.63ID:qw+8wgIL0
日時を取得したいのですが、ユーザーが「日付と時刻」の「自動設定」をOFFにしてる場合、正確な時間を取得することはできますか?
0897名称未設定2013/10/13(日) 22:18:36.31ID:qUlZmDN20
自動設定をONにしてもらえwww
0898名称未設定2013/10/13(日) 22:19:38.70ID:H33UJEd2P
ためしてみればいいんじゃないかな。手動でiPhoneの日付かえて、[NSDate date]でとってみれば。
0899名称未設定2013/10/13(日) 22:57:53.97ID:Sk6PJp3P0
>>896
https://github.com/jbenet/ios-ntp
ネットワークが必須だけどね
0900名称未設定2013/10/13(日) 23:11:35.92ID:HOZq8pti0
撮った女の子を裸にする画像処理技術ってレベル高いでしょうか?
0901名称未設定2013/10/13(日) 23:24:41.06ID:uEleJhUn0
ハダカメラ Delux
0902名称未設定2013/10/14(月) 02:23:20.68ID:sUbeXN1q0
顔認識して、顔の下に適度な大きさの裸画像を貼り付けるくらいなら。
でもリジェクトされるけどな。
0903名称未設定2013/10/14(月) 02:52:37.51ID:T8hBFjpZ0
そういや、311後に雨後のタケノコのごとく湧いてた
放射能測定アプリ(というジョークアプリに決まってんじゃないすかーwww)って
詐欺有料アプリ群たちはどうなったんだろう。
0904名称未設定2013/10/14(月) 03:03:29.87ID:OtJjPAz60
あれって測定できないの??
0905名称未設定2013/10/14(月) 05:28:38.05ID:T8hBFjpZ0
ハードとセットの対応アプリならともかく
iPhone単体のどこに放射線計測するセンサーがついてんだよ…
0906名称未設定2013/10/14(月) 08:10:38.91ID:iyWtEuHv0
ハード付きはハードは有料、アプリは無料
というのはあったけど
ソフトだけの有料なやつもあったのかw
0907名称未設定2013/10/14(月) 10:07:00.10ID:JEMfijrZ0
>>895
sectionの数あってる?
データソース側がビュー側より1個少ないのでは?
0908名称未設定2013/10/14(月) 11:02:14.73ID:lTRUwpP4i
tes
レス数が900を超えています。1000を超えると表示できなくなるよ。