MGTwitter、API1.1対応奮闘記

今やフレームワーク使えば一通りのことができてしまうんですよね。

基本はこちらの手順に沿ってやれば動いたのですが、その後でちょっとハマりました。

MGTwitterEngine Twitter API 1.1対応: iPhoneアプリ開発備忘録

つぶやく文字列に括弧文字、(、)が含まれているとエラーになると言う事象。

こちらが助けになりました。

Cocoamix.jp » [Xcode]MGTwitterEngineのエンコード

上記のままだとエスケープの対象が足りないため、追加する。

(CFStringRef)@”;/?:@&=$+{}<>,”,

(CFStringRef)@”!*’()%#[];/?:@&=$+{}<>,”,

スポンサーサイト


iOS@2013/06/25 21:32   | 0 comments | 0 trackbacks |

UITableViewCellでの削除ボタン表示を検知したかった

参考にしたのはこちら。

iPhone UITableView - Delete Button - Stack Overflow

要はこんな感じで「willTransitionToState」をオーバライドすれば良いと。

- (void)willTransitionToState:(UITableViewCellStateMask)state {
[super willTransitionToState:state];

if(state == UITableViewCellStateShowingDeleteConfirmationMask){
NSLog(@"delete button appear");

} else if(state == UITableViewCellStateDefaultMask){
NSLog(@"button disappear");
}
}

ただ、これはUITableViewCell内で実装しないと行けない訳です。例えば、削除ボタン出ているときにUITableViewControllerの編集ボタンを使用不可にしたいなんてときに困ってしまった訳で。

さらに参考になったのがこちら。

iphone - Reference from UITableViewCell to parent UITableView? - Stack Overflow

カスタマイズしているUITableViewCellのヘッダに以下のように書いて。

// interface
UITableViewController *rootController;

// propery
@property (nonatomic, assign) UITableViewController *rootController;

実装ではこんな感じに。

@synthesize rootController;

- (void)willTransitionToState:(UITableViewCellStateMask)state {
[super willTransitionToState:state];

if(state == UITableViewCellStateShowingDeleteConfirmationMask){
rootController.navigationItem.leftBarButtonItem.enabled = NO;
} else if(state == UITableViewCellStateDefaultMask){
rootController.navigationItem.leftBarButtonItem.enabled = YES;
}
}

さらに、UITableViewControllerの方で参照させてあげればオッケーと。


// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
[途中省略]
UIViewController *viewController = [[UIViewController alloc] initWithNibName: @"ConditionCell" bundle: nil];
normalCell = (ConditionCell *)viewController.view;
normalCell.rootController = self;
[途中省略]
}

しっかし、stackoverflowにはお世話になってばかりだなーと。


iOS@2012/05/13 10:24   | 0 comments | 0 trackbacks |

UIBarButtonItemで”◀(逆三角形)”を表示したかった訳で

素朴に”◀”と書くと、最近はなぜか絵文字になってしまっていて困っていたのでした。objective-Cでのお話。

こちらを読んで目から鱗。

バーに配置する左三角矢印ボタンを作る - 中継地点

    UIToolbar *toolbar = [[[UIToolbar alloc] initWithFrame:CGRectMake(0,0,320,44)] autorelease];
UIBarButtonItem *backButton = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPlay
target:self
action:@selector(backAction:)] autorelease];
UIToolbar *bar = [[[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 44, 44)] autorelease];
bar.transform = CGAffineTransformMakeScale(-1,1);
[bar setItems:[NSArray arrayWithObject:backButton]];
UIBarButtonItem *wrappedBackButton = [[[UIBarButtonItem alloc] initWithCustomView:bar] autorelease];

UIBarButtonItem *forwardButton = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPlay
target:self
action:@selector(forwardAction:)] autorelease];

[toolbar setItems:[NSArray arrayWithObjects:wrappedBackButton, forwardButton, nil]];
[self.view addSubview:toolbar];

ちなみにこの部分は載せるUIToolbarのサイズに合わせて調整する必要があります。

    UIToolbar *bar = [[[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 44, 44)] autorelease];


iOS@2012/04/24 06:22   | 0 comments | 0 trackbacks |

Xcodeでコンパイルすると特定のターゲットでUndefined symbols

結構悩んだのでメモ。良くある有料版と無料版みたいにターゲットを二つ作っていたのですが、久々に無料版をコンパイルしようとしたらこんなエラーが。

Undefined symbols for architecture armv6:
"_OBJC_CLASS_$_XXXXX", referenced from:
objc-class-ref in YYYYYYY.o
ld: symbol(s) not found for architecture armv6
clang: error: linker command failed with exit code 1 (use -v to see invocation)

有料版だと普通に通るのになんでだーと数日悩んでたのでした。いろいろ調べてたら、最近追加したmファイルを「File Inspector」で見たら「Target Membership」のチェックが有料版しか付いていませんでした。無料版の方にもチェックしたら解決。

FileInspector

一体なぜなんだろうと。追加するときにはTarget両方チェックされているのに…。


iOS@2012/02/01 06:44   | 0 comments | 0 trackbacks |

Xcodeでアーカイブしたものをバリデーションしたらエラー

こんなメッセージが出てちょっと悩んだ。

iPhone/iPod Touch: application executable is missing a required architecture. At least one of the following architecture(s) must be present: armv6 (-19033)

ググったらドンピシャなのが。

xcode - Warning iPhone apps should include an armv6 architecture even with build config set - Stack Overflow

こちらにあるように、Architecturesにarmv6を追加したら直りました。つか、なんで消えたのだろう…。


iOS@2011/10/22 14:44   | 0 comments | 0 trackbacks |

iOS5にアップデートしようとしたら「3002」エラー…

プレビュー版ですが、アップデートできなくてちょっと悩んだ。

Solved: iTunes Error 3002 on iOS 5.0 Beta 1 Upgrade

Apple clearly mentions in its iOS 5 install instructions that you need to restore your iPhone and not update. You’ll get this error everytime you try updating iPhone to iOS 5.

こちらにあるように「アップデート」ではなく「復元」しろと。なぜだーと思いつつ復元したら(その際にはipswファイルを指定)うまくいきました。


iOS@2011/08/07 13:41   | 0 comments | 0 trackbacks |

iPhoneアプリでHTTP通信を頻繁に行っているとメモリ使用量が…

リークしている訳でもないし…Instruments見ながら数日悩んでいたら、「CFData(store)」てのが異様に増えているなーということに気づいて。

CFData Memory Problem - iPhone Dev SDK Forum

アプリケーションごとにキャッシュを作っているので、これを明示的にクリアしてあげないと行けなかったと。こんな感じで

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil];
[NSURLCache setSharedURLCache:sharedCache];
[sharedCache release];

こちらにも詳しく書いてありました。

Cocoaの日々: [iOS] UIWebView のキャッシュ調査


iOS@2011/05/07 09:07   | 0 comments | 0 trackbacks |

iPadでgroupTableViewBackgroundColorは使えないと

iphone - What is the problem with groupTableViewBackgroundColor on iPad? - Stack Overflow

ClearColorに置き換えられてしまうとのこと。知らんかった。


iOS@2011/04/30 20:50   | 1 comments | 0 trackbacks |

MGTwitterEngineの「isUser」でハマった…

iPhoneアプリでTwitter連携する際にお世話になっている「MGTwitterEngine」。この中にあるユーザーをフォローしているかどうかを取得する「isUser」と言うのがあるのですが、パラメータ渡しても「400」のステータスコードが帰って来て途方にくれていたのでした。

そして、解決策はこれも毎度お世話になっている「Stack Overflow」の中に。

iphone - MGTwitterEngine - isUser:receivingUpdatesFor: always return HTTP error 400? - Stack Overflow

リンク先にある様に、直接MGTwitterEngineの中を修正しました。MGTwitterEngine自体、新しいバージョンの物が出てるのでそこでは直っているのかもしれないですけど。

ちなみに、動く様になった後ではそれ用のdelegateメソッドを用意する必要があります。

- (void)miscInfoReceived:(NSArray *)statuses forRequest:(NSString *)requestIdentifier {
// statusesから結果を抽出してあーだこーだ
}


iOS@2011/04/30 11:24   | 1 comments | 0 trackbacks |

Xcode4でコンパイルしたらiAd動かなくなった…

iOSが特定バージョン以下のケースでしたが。

こちらを読んで解決できました。

iOS4.2対応でiAlbumPlayerがハマった落とし穴とその回避策 - sawatのiPhoneアプリ日記 - iPhoneアプリ開発グループ

ADBannerViewのサイズ指定定数が変更されている
iOS4.1以前では、ADBannerViewのサイズの指定定数はADBannerContentSizeIdentifier320x50とADBannerContentSizeIdentifier480x32でした。この定数はピクセルサイズが名前に含まれているのでiPadやRetina対応ディスプレイで使うのに問題がありました。そこで、ADBannerContentSizeIdentifierPortraitとADBannerContentSizeIdentifierLandscapeという新しい定数が用意され、以前の320x50と480x32はDeprecatedとなりました。

MeachWare Dev Blog: iAd's in Universal App


in my createBannerView method:
//If true then we're on iOS 4.2 (or newer) and we can use the identifiers
//If not true then we use the old identifiers
if (&ADBannerContentSizeIdentifierPortrait != nil) {
PortraitBanner = ADBannerContentSizeIdentifierPortrait;
LandscapeBanner = ADBannerContentSizeIdentifierLandscape;
NSLog(@"Running on iOS 4.2 or newer.");
} else {
PortraitBanner = ADBannerContentSizeIdentifier320x50;
LandscapeBanner = ADBannerContentSizeIdentifier480x32;
NSLog(@"Running on Pre-iOS 4.2.");
}

ためらいなく定数を変えてしまうAppleさすがと言うかふざけんなと言うか。


iOS@2011/04/08 22:12   | 0 comments | 0 trackbacks |

«  | HOME |  »

いろいろ作ったり

TweetsWind

プロフィール

Author:icot
総合電気メーカで働く会社員。お酒、ジョギング、音楽、本、料理をこよなく愛してます。ここでは、日々感じた事を書き連ねるとともに、いろいろ実験してみたりしてます。インド赴任を終えて日本で働いています。でも作るのはやめません。
icotfeels[at]gmail.com

これまでに感じたこと