论坛问题收集整理

好久不用论坛,前些天偶然想起登录一下CocoaChina, 发现自己曾经讨论过的一些问题还保留着,觉得有点用处,就收藏下来,以备日后查看。


一、关于Objective-C语法

@synthesize networkStream = _networkStream;
@synthesize fileStream    = _fileStream;
@synthesize bufferOffset  = _bufferOffset;
@synthesize bufferLimit   = _bufferLimit; 


_networkStream是class内部变量名
networkStream是property名字。
@synthesize networkStream = _networkStream; 代表property networkStream存取_networkStream 


二、UI方面的问题

ActionSheet动态添加button   

我想要动态添加按钮,想到两个方法。
方法一:用一个数组保存要添加的按钮的标题,然后在actionsheet的初始化时作为otherButtonTitles的值传入,但是这个方法编译时会警告说otherBUttonTitles的参数必须是NSString类型,而不能是数组。

       NSMutableArray  *arrayDistricts= [NSMutableArray array];
        for (int i=0; i<[districtDownloader.districts count]; i++) {
            NSString *district=[[districtDownloader.districts objectAtIndex:i] district_desc];
            [arrayDistricts addObject: district];
        }
        UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil//@"Are U sure to Play?"
                                                                 delegate:self 
                                                        cancelButtonTitle:nil 
                                                   destructiveButtonTitle:nil 
                                                        otherButtonTitles:arrayDistricts];

方法二:先用nil作为otherButtonTitles的值初始化actionsheet,然后对actionsheet用addButtonWithTitel方法,加入按钮,这样是出来了按钮,但是最后一个按钮点击没有反应。
  
      UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil//@"Are U sure to Play?"
                                                                 delegate:self 
                                                        cancelButtonTitle:nil 
                                                   destructiveButtonTitle:nil 
                                                        otherButtonTitles:nil];
        
        for (int i=0; i<[districtDownloader.districts count]; i++) {
            NSString *district=[[districtDownloader.districts objectAtIndex:i] district_desc];
            [actionSheet addButtonWithTitle: district];
            [district release];
        }
        [actionSheet addButtonWithTitle:@"Cancel"];
        actionSheet.cancelButtonIndex= [districtDownloader.districts count];


请问如果要让最后一个按钮能够点击,有什么解决的办法?

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

1楼回复:

最后一个title加一个nil 试下 。

3楼回复:

最后那个按钮是被你的TabBar挡住了,需要显示actionsheet的时候这样写。


  1. [actSheet showInView:[UIApplication sharedApplication].keyWindow];

三、网络请求的问题

怎么修改 User-Agent里面的内容?

我看到网上有两种种方法  ,
一种是
http://stackoverflow.com/questions/478387/change-user-agent-in-uiwebview-iphone-sdk

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)req navigationType:(UIWebViewNavigationType)navigationType {  
   NSMutableURLRequest *request = (NSMutableURLRequest *)req;     
    if ([request respondsToSelector:@selector(setValue:forHTTPHeaderField:)]) {      
       [request setValue:[NSString stringWithFormat:@"%@ Safari/528.16", [request valueForHTTPHeaderField:@"User-Agent"]] forHTTPHeaderField:@"User_Agent"];   
    }   
  return YES; 


另一种是调用私有API
http://blog.sina.com.cn/s/blog_661314940100muz9.html

  NSString *userAgent = @"Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_1 like Mac OS X;ja-jp)                         AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5F136 Safari/525.20";    
id webDocumentView;  
  id webView;  
webDocumentView = objc_msgSend(myWebView, @selector(_documentView));      
object_getInstanceVariable(webDocumentView, "_webView", (void**)&webView);   
objc_msgSend(webView, @selector(setCustomUserAgent:), userAgent); 


但是貌似两种方法都不起作用,不论在iphone上怎么修改,服务器端读到的User-Agent总是默认的值
如果读取是用User-Agent,写入是User_Agnet的话,好像也不起作用。 

------------------------------无耻的分割线-----------------------------

1楼回复:

试试这个
http://www.icab.de/blog/2010/04/07/changing-the-headers-for-uiwebkit-http-requests/ 


四、部署程序的一些问题

安装失败提示“资源已被更改”?    

http://www.cocoachina.com/bbs/read.php?tid=31003

 前些天给客户编译安装成功的程序,真今天却安装不上了,真是奇怪。 上一次跟这一次唯一不同的就是我换了一台电脑编译,不过 我也重新申请了Key,并重新下载了许可证和provisonfile,,Project Setting里面的Any Iphone OS Device 选项也重新设过了,按道理应该没问题,不知到是哪里出了错 。 这是客户在iTunes上的截图 

    
 

他删除了程序再重新安装也是一样,不知到还有哪一步漏了? 

3楼回复:
我也遇到这个问题。Mac下.app压缩成zip,然后windows下解压出来就有问题,不是每个项目都有,有的没有。
我的解决办法是把.app用优盘拷到windows下面,由windows压缩成RAR,然后网上传输这个RAR,远端也是windows,就能用itune同步了。 

五、关于应用的发布

iOS开发者企业项目可以发布在App Store上吗?

http://www.cocoachina.com/bbs/read.php?tid=60277

如题,如果我要开发一个企业内部用的iOS应用程序,但又不想自己去管理、部署、和更新,可不可以把程序发布到App Store上呢?我在苹果的网站上看到这么一段话  
The Enterprise Program only allows for the development of in-house applications for use by your company's employees. If you are interested in developing an application for the App Store, you will need to enroll in the Standard Program.

好像是说不可以, 那么如果我注册为Standard Program,要怎么样才能限制用户必须为企业的人员呢?可不可以通过配置文件来限定? 

------------------------------------------
1楼回复:
可以通过账号处理,比方只有你允许的账号才能登陆使用app没有账号的话无法使用
3楼回复:
也可以通过外设加密,必须通过外设才能打开软件 
5楼回复:
可否通过SSL协议,要求对客户端进行认证的方式来限制客户端? 

--------------------------------------------下面是新的问题------------------------------------

关于ipad企业应用安全性方面的问题   

现在有个项目,是企业要用ipad做办公,大概有200多台吧,主要是安全性方面有比较严格的要求,我想问一下有没有做过企业办公这一块的同行,给点意见或者建议,问题如下:


1.  ipad丢失以后能否通过远程控制来锁屏或者清除数据? 
    据我了解,ipad是有远程控制的功能的,苹果官方叫Mobile Device Management, 但需要第三方的应用来支撑,苹果没有透露相关的API或文档,估计自己实现起来难度相当大。 我了解到微软的Exchange是可以远程擦除ipad上的数据的,我也试验成功过,是在客户那里试验的,大概从发出命令到手机端接收并擦除要3~5分钟吧。有一种方法可以在一定程度上减少风险, 就是通过配置文件设置自动锁屏的时间,比如1分钟,当超过1分钟没有任何操作时,设备自动锁屏,这样就保证了安全,但也并非万无一失。我是想问有没有什么办法可以拿到苹果的MDM的API或者MDM协议的内容?

2. ipad上的邮箱能不能自动注销帐户或者清空邮件?
     据我所知现在邮箱是不能自动注销的,而且也不会自动清空邮件,必须得手动在设置里面把帐户给删除了,这对于安全性方面要求比较高的企业来说是很不利的,如果ipad丢失了,那邮件全部都会泄漏。那么如何才能保证邮箱的安全呢? 是不是要自己做一个邮件客户端?如果是,应该采用哪种协议?
--------------------------------------------------------------------
1楼:
一般来说设定密码十次输入错误就清除设备还是比较安全的。因为ios设备本身有漏洞,所以如果丢失之后立刻被断网、JB并获得root权限,理论上你的数据肯定会泄露的。所以如果默认的安全模式不能满足你,MDM之类的也不能。我想只能在数据加密上做文章了。 
2楼:
嗯,谢谢版主,输入密码超过十次自动清除数据这种方式还是比较靠谱,不用依赖于网络,MDM最大的缺陷就是要有网络连接,如果拿到之后迅速断网那么再远程擦除也没用。至于加密,内部加密还是外部加密?用外部设备来加密比较安全但是也麻烦,而且要增加成本。内部加密不知道有什么好的加密方式?主要是通讯录、邮件这些内容,ipad把这些内容都放在客户端,又不会定期清除,真的挺烦人。 

苹果会检查程序里面的功能吗?   

http://www.cocoachina.com/bbs/read.php?tid=60685

我昨天刚提交一个程序,是办公软件,需要用户输入帐号密码登录的。我想知道苹果在检查的时候会不会检查里面的功能? 没有帐号他们如何登录进去?是不是需要我发一个邮件告诉他们? 
回复:
有测试账号和密码的话是要提供给apple的,就在提交软件介绍的那个页面。 
在review note里面填写测试账户名 密码 
如果因为一些条件的限制真的没有办法给的话,就录屏,然后给他们视频的下载地址。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值