小编Jas*_*ien的帖子

在UIWebView中处理URL重定向

UIWebView我的应用程序中有一个用于显示在我的应用程序中点击的链接的网页.

一些链接是URL缩短的链接,例如tinyURL或bit.ly. 在初始URL加载后重定向这些URL.

我的问题是我的应用程序中的一些链接是URL缩短的链接到不是网页的资源 - 例如视频或其他媒体.

我可以使用webView:shouldStartLoadWithRequest:navigationType:截取URL并决定如何处理它 - 只有它只在初始加载时调用,而不是在重定向后调用.

我该怎么做来拦截bit.ly链接所指向的URL?

iphone objective-c uiwebview uikit

7
推荐指数
1
解决办法
9378
查看次数

在iPhone上使用HTTP摘要式身份验证

我有一个应用程序与使用HTTP摘要身份验证的服务器通信.

在我看来,iPhone中的"会话"管理对于我们的开发人员来说是相当"黑盒子".是不是我们无法看到框架如何处理/持久化http会话?

如果我只是在这里昏暗,有人会解释如何在iPhone上处理HTTP摘要身份验证吗?

我的基本操作是:

  • 向安全网址发出请求
  • 服务器发送401
  • 客户端创建并保留凭证,并将其传递回服务器
  • 服务器验证凭证,验证完成请求,否则发送另一个401.
  • 发出后续请求以保护网址
  • 服务器再次请求授权........

这适用于单个请求,但如果我发出其他后续请求,则服务器再次请求授权.服务器已经为特定用户持久保存了会话,但是iPhone由于某种原因没有在同一会话中发出请求...因此,服务器必须抛弃认证对象并在每次客户端创建一个新对象向安全网址发出请求.

我确定这不是正确的行为.

如果我们看一下浏览器在这种情况下的行为:

  • 浏览器从安全URL请求数据
  • 服务器发送401
  • 浏览器提示用户输入凭据,持久保存,将其传递给服务器
  • 服务器验证凭证,如果验证则返回数据,否则发送另一个401.
  • 由于浏览器管理会话,因此不会提示对安全URL发出的后续请求提供凭据.

我正在创建NSURLCredential并将其保留在NSURLCrendtialStorage中.然后,当应用程序收到'didReceiveAuthenticationChallenge'时,我从存储中检索凭证并将其传回,如果不存在(在第一个请求中),则创建凭证.

任何帮助将不胜感激.谢谢.

iphone authentication session-management http-digest

7
推荐指数
1
解决办法
4906
查看次数

Mac OS X:使用PID获取任意运行应用程序的详细过程信息(特别是其启动参数)

我试图检测特定应用程序何时启动.

目前我正在使用NSWorkspace,注册"确实启动应用程序"通知.我还使用该runningApplications方法来获取应用启动时当前正在运行的应用.

对于大多数应用程序,应用程序包的名称就足够了.我有一个"已知应用程序"的plist,我用通知中传递的名称交叉检查.

这可以正常工作,直到您遇到一个应用程序作为代理,使用命令行参数启动另一个应用程序.

示例:Mac上新发布的Portal没有专用的应用程序包.Steam可以创建一个快捷方式,只需hl2_osx使用-game参数和portal参数启动应用程序即可.

由于更多基于源的游戏正在前往Mac,我想他们将使用相同的方法启动,有效地运行hl2_osx带有-game参数的应用程序.

有没有一种很好的方法来使用Cocoa API获取参数列表(及其参数)?

NSProcessInfo 接近,提供`-arguments'方法,但只为自己的进程提供信息......

NSRunningApplication 提供了使用PID获取任意应用程序信息的能力,但没有命令行参数...

有没有什么能填补两者之间的空白?

我试图不去产生NSTask运行ps -p [pid]和解析输出的路线......我更喜欢更高级别的东西.

cocoa pid process objective-c command-line-arguments

7
推荐指数
1
解决办法
9803
查看次数

保留后立即自动释放的重点是什么?

我正在查看一些开源代码并尝试理解作者为何以特定方式做了某些事情.

该类是一个包装器,NSArray用于创建具有push,pop等的堆栈数据结构.

一种方法是topObject返回堆栈中最顶层的对象,其实现是:

- (id)top {
    return [[[stack lastObject] retain] autorelease]; // stack is an instance of NSMutableArray
}
Run Code Online (Sandbox Code Playgroud)

什么是保留,然后立即自动释放?

我最初的反应是,这会阻止分析仪警告内存泄漏,但我在没有保留/自动释放的情况下进行了分析,但仍然没有警告.

查看生命周期,将创建一个对象,将其推送到堆栈并释放,因此堆栈拥有该对象(底层数组将在添加时保留它).

所以我不明白这里使用retain/autorelease ......

cocoa cocoa-touch memory-management objective-c foundation

7
推荐指数
1
解决办法
179
查看次数

使用Objective-C块的UIView动画

我一直在玩两种不同的UIView动画方式:开始/提交和阻止.

我注意到beginAnimations:context:/处理commitAnimations方式非常异步,在动画运行时保持UI自由.

但是,我也注意到这种animateWithDuration:animations:completion方式似乎阻止了UI,使其在动画运行时没有响应.

我认为使用块的一个要点是轻松实现异步执行.为什么UIView动画的块变体会阻止UI,而开始/提交变体却没有?

编辑:

我的问题最初假设块动画是同步操作并阻止了UI.从Jeff Kelly的回答中可以看出,情况并非如此.我原来的假设不正确,块动画不同步.有关详细信息,请参阅Jeff的答案.

iphone animation objective-c uiview objective-c-blocks

7
推荐指数
1
解决办法
4174
查看次数

iPhone上的Tokyo Cabinet vs SQLite3

有没有人在iPhone上使用东京内阁?我很想知道它和SQLite3之间是否存在任何真实的性能差异.

另外,SQLite 3具有SQL的表现力,Tokyo Cabinet是否有任何类型的查询语言?

任何意见都将非常感谢,谢谢.

database sqlite iphone comparison tokyo-cabinet

6
推荐指数
1
解决办法
2228
查看次数

以编程方式在App Store上运行搜索?

是否可以从我的应用程序中打开App Store应用程序并运行搜索?

我正在寻找是否有一个appstore://类型的URL我可以使用,就像mailto:和sms:分别打开Mail和SMS一样.

有谁知道这是否可能?

编辑 - 更多信息:

我一直在尝试使用UIApplication的openURL:方法,传递各种形式的phobos和iTunes URL,到目前为止没有运气.

有些人可能知道您可以右键单击桌面上iTunes中的链接并将链接复制到某些页面.我将链接复制到列出特定公司的所有应用程序的页面.

有些人还可能知道您可以在iPhone上的App Store应用程序中搜索公司名称,搜索结果将是该公司拥有的所有应用程序.

我正试图通过我的应用程序中的链接实现这一目标...

使用从桌面上的iTunes复制的链接只需打开Safari,然后打开iTunes应用程序,最后以"无法连接到iTunes Store"消息结束.无论URL是以phobos还是itunes开头,都是如此.

这是我一直试图使用的链接(ID修剪)

http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewArtist?id=someId
Run Code Online (Sandbox Code Playgroud)

任何想法都会很棒,谢谢.

iphone search app-store

6
推荐指数
1
解决办法
5746
查看次数

UITableView,UIWebViews和scrollsToTop属性=麻烦

我的应用有一个UITableView.UITableView有一个标题视图,它是一个UIWebView.

默认情况下,滚动视图的scrollsToTop属性设置为YES,这将使用户可以点击状态栏滚动到滚动视图的顶部.

如果在一个视图中嵌入了两个滚动视图,它们都将其scrollsToTop属性设置为YES,则点击状态栏不会执行任何操作.

解决方案是将其中一个scrollsToTop属性设置为NO.这会重新启用状态栏.

现在问题是:UIWebView没有公开它的滚动视图,因此无法访问它的scrollsToTop属性.我只希望在点击状态栏时滚动到顶部的表视图,而不是Web视图.

有谁知道我怎么能做到这一点?

iphone scroll uiwebview uitableview uiscrollview

6
推荐指数
1
解决办法
4987
查看次数

简单的Objective-C过度释放*应该*崩溃不会崩溃.为什么?

我的调试器坏了,或者有一些我不理解的基础.

我在一个非常基本的命令行程序中有一些非常基本的代码应该崩溃.但是,它并没有崩溃.

int main (int argc, const char * argv[])
{
    NSString *string = [[NSString alloc] initWithString:@"Hello"];

    [string release];

    NSLog(@"Length: %d", [string length]);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

对于有效的字符串,log语句打印"Length:5".但是,该字符串应该被该点释放,并且exec_bad_access应该抛出错误.

我已经尝试了附带调试器的代码并且没有附加调试器 - 两者都给出了相同的结果.我也启用(和禁用)NSZombie,这似乎没有任何影响(我最初认为这是问题,因为NSZombie对象永远不会被释放 - 但它仍然不会因NSZombie禁用而崩溃).

我在我的本地.gdbinit文件中设置了断点来打破诸如-[NSException raise]和之类的东西objc_exception_throw.我还在许多方法上设置断点NSZombie以捕获它们.

fb -[NSException raise]
fb -[NSAssertionHandler handleFailureInFunction:file:lineNumber:description:]
fb -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:]

#define NSZombies
# this will give you help messages.  Set to NO to turn them off.
set env MallocHelp=YES …
Run Code Online (Sandbox Code Playgroud)

crash debugging memory-management objective-c foundation

6
推荐指数
1
解决办法
1684
查看次数

如果在编译时知道选择器及其参数,为什么在运行时使用performSelector:withObject:withObject?

我刚看到Three20中的一些代码看起来像这样:

  SEL sel = @selector(textField:didAddCellAtIndex:);
  if ([self.delegate respondsToSelector:sel]) {
    [self.delegate performSelector:sel withObject:self withObject:(id)_cellViews.count-1];
  }
Run Code Online (Sandbox Code Playgroud)

在LLVM 2.0上,这会导致编译错误:

error:指向接口'id'的指针算术,在非脆弱的ABI中不是常量

我知道为什么会发生错误,我知道如何解决它.我只需要直接调用该方法,如下所示:

  SEL sel = @selector(textField:didAddCellAtIndex:);
  if ([self.delegate respondsToSelector:sel]) {
    [self.delegate textField:self didAddCellAtIndex:(_cellViews.count - 1)];
  }
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果您在编译时知道选择器及其参数,为什么需要performSelector:withObject:withObject:在运行时使用?我不明白为什么代码首先以这种方式编写.如果选择器和参数动态传递给方法,我可能会理解,但它们不是,选择器及其参数是硬编码的(即使索引在运行时确实发生了变化,它获取索引的方法也很难编码.)

如果有人能向我解释为什么有必要这样做,我将不胜感激.否则,我将在这里更改所有这些代码.

runtime dynamic objective-c llvm

6
推荐指数
2
解决办法
6546
查看次数