スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[Code]iOS系统版本检测

可能Mac上没这大问题,但是iOS上要做兼容性可就不简单了,就拿MoeApps来说如果想要向下支持5.0以下的系统就必须不能使用StoryBoard和Twitter.framework。但是同时又不想影响iOS 5以上的系统的体验,最好的方法就是针对不同版本的系统做出不同的判断~

想要获取当前系统版本很简单:
[[UIDevice currentDevice] systemVersion]

于是如果想要支持5.0以上的系统就:
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 5.0) {
}
当然也可以改成小于或者加else来对5.0以下的做支持,这样就不会因为4.x使用5以上的api导致程序崩溃了。

当然MoeApps会支持4.x的~
スポンサーサイト

テーマ : Software
ジャンル : コンピュータ

bi酱的iOS开发课堂,part: unknown

在同一个UIAlertView里多次调用UIAlertView:
主要问题在- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex上,当只有一个或者几个按钮的时候用if (buttonIndex == 1) {...}来区分,但是如果是多个UIAlertView就会出现冲突。
解决方法也比较简单,首先定义不同的AlertView用不同的tag。比如xxxAlert.tag = 4;
然后在- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex里用if (alertView.tag == 4) {...}这样的来区分不同的AlertView,之后再用buttonIndex来定义每个按键的作用。

长按按钮激活:
这个的话经常被用来做隐藏功能。
UILongPressGestureRecognizer *tapAndHold = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapAndHold)];
[tapAndHold setMinimumPressDuration:10];
[self.holdbutton addGestureRecognizer:tapAndHold];
[tapAndHold release];

之后只要-(void)handleTapAndHold{...}就可以了

程序内发送邮件:
首先导入MessageUI.framework,然后添加

#import 《MessageUI/MessageUI.h》
#import 《MessageUI/MFMailComposeViewController.h》

到.h文件里。
接着就是代码:

-(IBAction)buttonpressed{
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self;
[picker setSubject:@"hello~"];
NSArray *toRecipients = [NSArray arrayWithObject:@"xxx@xx.com"];
[picker setToRecipients:toRecipients];
NSString *emailBody = @"world~";
[picker setMessageBody:emailBody isHTML:NO];

[self presentModalViewController:picker animated:YES];
[picker release];

}
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
[self dismissModalViewControllerAnimated:YES];
}

这样就会产生一个主题为hello~内容为world~的邮件,收件人是xxx@xx.com。注意下面的- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error 不可少,少了之后就无法关闭邮件界面了。
然后...如果要对信件内容分行怎么办?如果是AlertView里是可以使用/n来分行的,但是NSString里不行。于是得用上一点小技巧:首先把[picker setMessageBody:emailBody isHTML:NO];里的NO改成YES。接着修改emailBody,HTML里《/p》代表空行,于是就可以变成"123456《/p》654321",输出就是:
123456
654321

POST和GET的区别:
为了方便起见,我就把要发送的string统一称text,网址也统一了,这样好区分。
首先是GET的:

NSString *urlString = [NSString stringWithFormat:@"http://xxx.com/get.php?get=%@",text];
NSURL *url = [[NSURL alloc] initWithString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSError *error;
NSData *urlData;
NSURLResponse *response;
urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString *data=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
NSLog(@"response:%@",data);//服务器返回信息,用于查看是否正常发送


POST的:

NSString *post = text;
NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"http://xxx.com/post.php"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSError *error;
NSURLResponse *response;
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString *data=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
NSLog(@"response:%@",data);//服务器返回,用于检测是否正常发送

感觉上POST比GET更复杂,GET的方式就好像我们日常在浏览器中输入网址一样,所以直接就是个url访问所以当然简单得多了~
当然如果需要的话可以在request头部也就是http header加入身份信息,比如cookie什么的:(结合上面的代码)

/*get或者post开始加载..*/
NSHTTPCookie *cookie;
NSMutableArray *cookies;
NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [cookieJar cookies]) {
[cookies addObject:cookie];
cookies = [NSMutableArray array];
/*开始加载request..*/
}
NSDictionary * headers = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies];
[request setAllHTTPHeaderFields:headers];
/*服务器返回代码...*/


这次就教这么多,希望对新手能用得上....以后再教其他的,比如oauth认证还有JSON以及XML解析等..

テーマ : Software
ジャンル : コンピュータ

APNS Push中把token上传到服务器的代码

奇怪了...居然网上都没人写出来...
你们不写我来写!

-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
NSLog(@"deviceToken: %@", deviceToken);

NSString* newToken = [deviceToken description];
newToken = [newToken stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
newToken = [newToken stringByReplacingOccurrencesOfString:@" " withString:@""];

NSString *urlString = [NSString stringWithFormat:@"http://xxxx.com/xxx.php?token=%@",newToken];
NSLog(@"%@",newToken);
NSURL *url = [[NSURL alloc] initWithString:urlString];

NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];

NSData *urlData;
NSURLResponse *response;
urlData = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:nil];
}

首先就是获取到deviceToken,然后去除掉中间的空格和两边的括号。接着就是用GET的方式把这String提交给服务器。
因为我不是网页开发者所以服务器端的代码也就不公布了。至于说要做成“只提交一次token”的方法是不对的。APNS有feedback服务,正道是2边配合着使用....不然服务器压力会非常大...

顺便提示,不同的profile build出来的所获得的token是不同的,比如如果你要dev测试的话需要的是debug的profile的build获得的token是只能用dev的证书来push的,ssl地址是带sandbox的。而ad-hoc和release的profile所获得的token不同于dev,使用的也是production的证书来push,ssl地址则是不带sandbox的。所以不要以为同样的id不同profile所build获得的token是一样,其实完全不同,当初就是卡在这里结果怎么样都无法用production的证书来push。

再有一个提示就是注意别打错代码了...特别是服务器端...有时候根本察觉不出来的...

テーマ : 吐槽而已
ジャンル : 日記

本地视频播放

#import !MediaPlayer/MPMoviePlayerController.h!

- (void)playMovieAtURL:(NSURL*)theURL
{
MPMoviePlayerController* theMovie= [[MPMoviePlayerController alloc] initWithContentURL:theURL];
theMovie.scalingMode=MPMovieScalingModeAspectFill;
// theMovie.userCanShowTransportControls=NO;

// 注册播放完成通知
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(myMovieFinishedCallback:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:theMovie];

//影片播放是异步的,所以此方法立即返回。
[theMovie play];
}

// 当影片播完毕,释放controller.
- (void)myMovieFinishedCallback:(NSNotification*)aNotification
{
MPMoviePlayerController* theMovie=[aNotification object];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:MPMoviePlayerPlaybackDidFinishNotification
object:theMovie];

//释放影片在playMovieAtURL创建的实例
[theMovie release];
}

- (void)video_play:(NSString*)filename
{
NSString* s = [[NSBundle mainBundle] pathForResource:filename ofType:@"m4v"];
NSURL* url = [NSURL fileURLWithPath:s];
NSLog(@"Playing URL: %@", url);
[self playMovieAtURL:url];
}

テーマ : Software
ジャンル : コンピュータ

获取当前经纬度

iphone/ipad中获取当前的经纬度...


- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
NSLog(@"test");
CLLocationCoordinate2D loc = [newLocation coordinate];
lat = loc.latitude;//get latitude
lon= loc.longitude;//get longitude
}



//详细:
//首先头文件应继承
CLLocationManagerDelegate.
//并:
#import !CoreLocation/CoreLocation.h!

//响应事件中写如下代码:
CLLocationManager *_locManager = [[CLLocationManager alloc] init];
[_locManager setDelegate:self];
[_locManager setDesiredAccuracy:kCLLocationAccuracyBest];
[_locManager startUpdatingLocation];

//重载
#pragma mark -
#pragma mark Location manager
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
CLLocationCoordinate2D loc = [newLocation coordinate];
NSString *lat =[NSString stringWithFormat:@"%f",loc.latitude];//get latitude
NSString *lon =[NSString stringWithFormat:@"%f",loc.longitude];//get longitude
NSLog(@"%@ %@",lat,lon);
}

テーマ : Software
ジャンル : コンピュータ

カレンダー
11 | 2016/12 | 01
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
プロフィール

bi119aTe5hXk

Author:bi119aTe5hXk
こんにちは(わ?)、私biです。
我是bi119aTe5hXk,觉得麻烦的话直接叫我bi就可以了~(快感谢我
iOS/Mac Developer/Geek. ACG+Hentai.
billgateshxk是我的旧名。
不喜欢Windows请不要谈论这些相关的。

不是夶请不要用土壕称呼人家!哼!

Powered by:

ブログ内検索
月別アーカイブ
カテゴリー
RSSリンクの表示
リンク
ブロとも申請フォーム

Become friends with me~

Products

MoeApps Lite

-----------------------------------

MoeApps

-----------------------------------

DevDoc

GitHub GoogleCode Get App

-----------------------------------

MoeApks

「NOW MAKING」

-----------------------------------

Moefou for Mac (API)

GitHub

-----------------------------------

RegIP

GitHub Get App

-----------------------------------

萌否电台 for Mac

Get App More Info

Bangumi
Bill gates hxk 的个人主页
メール

名前:
邮件地址:
标题
内容:

注意:点击提交将会将你的节操随从邮件一起发送喔。

アクセスカウンタ
QR Code
QR
Support us!
Grobal user:

国内可选支付宝:

Twitter

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。