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

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

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

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

iOS

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

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

5回答

4312閲覧

【iOS】違うメソッド間で同じ変数を使いたい

退会済みユーザー

退会済みユーザー

総合スコア0

Objective-C

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

iOS

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

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

6クリップ

投稿2014/10/22 10:10

iOS開発をしております。
違うメソッド間で同じ変数を使えず、開発が詰まっております。
具体的には一つのメソッドでUIimageViewに画像を設定して、他のタイミングで呼ばれるメソッドでその画像を隠すというものです。
どなたかお分かりになる方、助けていただけると助かります。

UITableViewクラスの.hファイル

lang

1 2#import "Sample2TableViewCell.h" 3#import "UIImageView+WebCache.h" 4 5@interface TimelineTableViewController : UITableViewController<UIScrollViewDelegate> 6 7{ 8 Sample2TableViewCell *cell; 9} 10 11@property (nonatomic, retain) Sample2TableViewCell *cell; 12 13@end

UITableViewクラスの.mファイル

lang

1 2#import "TimelineTableViewController.h" 3#import "Sample2TableViewCell.h" 4#import "AFNetworking/AFNetworking.h" 5#import "UIImageView+AFNetworking.h" 6#import "UIImageView+WebCache.h" 7#import "QuartzCore/QuartzCore.h" 8 9 10@interface TimelineTableViewController (){ 11 Sample2TableViewCell *cell; 12} 13 14@end 15 16- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 17 18 //カスタムセルのクラスの設定 19 NSString *cellIdentifier = @"TimelineTableViewCell"; 20 _cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 21 if (!_cell){ 22 _cell = [[Sample2TableViewCell alloc] 23 initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier]; 24 } 25 26 //各セルにサムネイル画像を設定(出来ている。) 27 NSString *thumbnailURL = [_thumbnail_ objectAtIndex:indexPath.row]; 28 [_cell.thumbnailView setImageWithURL:[NSURL URLWithString:thumbnailURL] 29 placeholderImage:[UIImage imageNamed:@"yomikomi simple.png"]]; 30 return _cell ; 31} 32 33//動画再生前に呼び出されるメソッド 34-(void)movieLoadStateDidChange:(id)sender{ 35 if(MPMovieLoadStatePlaythroughOK ) { 36 NSLog(@"STATE CHANGED"); 37 //再生前にサムネイル画像を隠す(ここが失敗する) 38 _cell.thumbnailView.hidden = YES; 39 40 } 41}

カスタムセルの.hファイル

lang

1 2@interface Sample2TableViewCell : UITableViewCell 3 4//サムネイル画像(UIImageView) 5@property (retain, nonatomic) IBOutlet UIImageView *thumbnailView; 6 7@end 8

カスタムセルの.mファイル

lang

1 2#import "Sample2TableViewCell.h" 3 4@implementation Sample2TableViewCell 5 6@synthesize thumbnailView; 7 8@end

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

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

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

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

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

guest

回答5

0

cellForRowAtIndexPathはテーブルの初期化の際にセルの個数だけ繰り返し実行されるメソッドです。
(breakpointを貼って実行するとindexの個数だけぐるぐる回ってきます。)
なのでここで起きているのは

_cell = index1のcell _cell = index2のcell _cell = index3のcell ... ... _cell = index最後のcell

となり、最後のセルだけが_cellに代入されていることになります。
(なのでもしかしたら最後のセルのサムネイルだけ非表示になっていたり?)

これ以上は
・どういう操作をしたときに非表示にしたいのか?
・[ここが失敗する]というのはエラーになるのか?それともただ非表示にならないだけか?
などがわからないとなんとも言えません。

投稿2015/02/12 11:00

jollyjoester

総合スコア1585

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

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

0

.h
@interface TimelineTableViewController : UITableViewController<UIScrollViewDelegate>

@end

.m
@interface TimelineTableViewController()
// 非ARC
@property (nonatomic, retain) Sample2TableViewCell *cell;
// ARC
@property (nonatomic, strong) Sample2TableViewCell *cell;

@end
@implementation TimelineTableViewController
// 非ARCのみ
@synthesize cell

  • (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

~~
}
-(void)movieLoadStateDidChange:(id)sender{
~~
}
@end

こうじゃないですかね?

投稿2014/12/25 02:58

ban

総合スコア12

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

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

0

TableViewのCellは再利用されるので、そのコードだと動作しない場合もあるように思います。
(Cellの数にもよるかも)

サムネイルを非表示にしたいタイミングが、セルのタップ時であれば、```lang-objc

  • (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    _cell = [(UITableViewCell *)[(UITableView *)self cellForRowAtIndexPath:nowIndex] ;

_cell.thumbnailView.hidden = YES;

}

とかどうでしょう?

投稿2014/10/23 06:05

sekitaka_1214

総合スコア509

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

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

退会済みユーザー

退会済みユーザー

2014/10/23 10:31

申し訳ないです。解決できませんでした汗
guest

0

言語仕様はよく知りませんが、_cellと言う命名に問題はないのでしょうか?

投稿2014/10/23 01:46

TaMaMhyu

総合スコア1356

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

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

退会済みユーザー

退会済みユーザー

2014/10/23 02:15

インスタンス変数にアンダースコアを付けることで、ローカル変数と見分けやすくするという手法があり、文法上、言語上は意味はないそうです! http://q.hatena.ne.jp/1335967529
guest

0

一つのクラスで複数のメソッド間で変数を共有したいなら
ヘッダファイルに変数を宣言するとかいいじゃないでしょうか。

クラス間の変数の受け渡しですと
シングルトンを使ってみては?

下記に参考サイトのURLを張っておきます。

ちなみに、シングルトンはstaticでメモリ空間を占領してしまうので
乱用には気を付けてくださいね。

あとは、同じクラスから継承させてその親クラスで
値の橋渡しをするとか・・・

シングルトン参考サイト
http://blog.syuhari.jp/archives/2178
http://www.bright-sys.co.jp/blog/design-pattern-for-iphone-01/

投稿2014/10/23 00:47

TakahiroKobaru

総合スコア18

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

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

退会済みユーザー

退会済みユーザー

2014/10/23 01:33

<< 一つのクラスで複数のメソッド間で変数を共有したいなら ヘッダファイルに変数を宣言するとかいいじゃないでしょうか。 << 今回はおそらく同じクラスの中のメソッド間での変数共有です。 ヘッダーで宣言していると思うのですが、記述が足りないのでしょうか?
TakahiroKobaru

2014/10/23 02:21

一度、tableViewメソッドで_cellに値が入っているか確認してみては(return する直前)? そこで、実態がなかったらそこに問題があるとわかりますので。 それか、@endの位置ですかね? 一番下にしてみては? すみません、推測での回答で。。。
TakahiroKobaru

2014/10/23 02:26

もし、実行できるならエラーコードを張っていただけますか? あと、UITableView.hをUITableView.mでimportしてみては?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問