好的,这就是计划.我从中获取数据的XML允许电话号码字段中的非数字文本(用于描述或联系人姓名等).我试图只提取数字并用它们调用tel:URL来发起呼叫.这是什么不工作:
NSCharacterSet *charset = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
NSString *number = @"(555) 555-5555 Office";
NSString *strippedNumber = [number stringByTrimmingCharactersInSet:charset];
NSString *phoneURL = [NSString stringWithFormat:@"tel:%@", strippedNumber];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneURL]];
Run Code Online (Sandbox Code Playgroud)
如果有任何明显的拼写错误,他们只是错别字.:)
Apple的多线程文档不会NSIndexPath列为线程安全与否!作为一个不可变类,我通常认为它是线程安全的.
以前,我确信用于说明NSIndexPath实例已共享且全局唯一的文档.现在似乎已经消失了,让我怀疑iOS5/Mac OS X 10.7的设计已经修改.
我在Mac OS X 10.6(Snow Leopard)上看到了很多来自客户的崩溃报告,这些报告似乎在试图访问索引路径时崩溃.因此我想知道:实际的实例是线程安全的,但是将它们从共享缓存中拉出来的逻辑不是吗?有人有任何见解吗?
这是一个示例堆栈跟踪BTW:
Dispatch queue: com.apple.root.default-priority
0 libobjc.A.dylib 0x96513f29 _cache_getImp + 9
1 libobjc.A.dylib 0x965158f0 class_respondsToSelector + 59
2 com.apple.CoreFoundation 0x948bcb49 ___forwarding___ + 761
3 com.apple.CoreFoundation 0x948bc7d2 _CF_forwarding_prep_0 + 50
4 com.apple.Foundation 0x994b10c5 -[NSIndexPath compare:] + 93
5 com.apple.Foundation 0x99415686 _NSCompareObject + 76
6 com.apple.CoreFoundation 0x948af61c __CFSimpleMergeSort + 236
7 com.apple.CoreFoundation 0x948af576 __CFSimpleMergeSort + 70
8 com.apple.CoreFoundation 0x948af38c CFSortIndexes + 252
9 com.apple.CoreFoundation 0x948fe80d CFMergeSortArray + 125 …Run Code Online (Sandbox Code Playgroud) 我想我读过与这个问题有关的每一个网页,但我仍然无法找到解决方案,所以我在这里.
我有一个不受我控制的HTML网页,我需要从我的iPhone应用程序解析它.这是我正在谈论的网页示例:
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
</HEAD>
<BODY>
<LI class="bye bye" rel="hello 1">
<H5 class="onlytext">
<A name="morning_part">morning</A>
</H5>
<DIV class="mydiv">
<SPAN class="myclass">something about you</SPAN>
<SPAN class="anotherclass">
<A href="http://www.google.it">Bye Bye è un saluto</A>
</SPAN>
</DIV>
</LI>
</BODY>
</HTML>
Run Code Online (Sandbox Code Playgroud)
我正在使用NSXMLParser,它一直顺利,直到找到èhtml实体.它调用foundCharacters:for"Bye Bye",然后调用resolveExternalEntityName:systemID ::,其实体名称为"egrave".在这个方法中,我只是返回在NSData中转换的字符"è",再次调用foundCharacters将字符串"è"添加到前一个"Bye Bye",然后解析器引发NSXMLParserUndeclaredEntityError错误.
我没有DTD,我无法更改我正在解析的html文件.你对这个问题有什么想法吗?罗伯,先谢谢你们所有人.
更新(12/03/2010).在Griffo的建议之后我得到了这样的结论:
data = [self replaceHtmlEntities:data];
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
[parser setDelegate:self];
[parser parse];
Run Code Online (Sandbox Code Playgroud)
其中replaceHtmlEntities:(NSData*)是这样的:
- (NSData *)replaceHtmlEntities:(NSData *)data {
NSString *htmlCode = [[NSString alloc] initWithData:data …Run Code Online (Sandbox Code Playgroud) 我有一个NSURL.
它是file://localhost/Users/Me/File.xml
我想要一个NSUtring,它是/Users/Me/File.xml
我可以使用一些很好的功能吗?
我看到有一个属性name(NSParagraphStyleAttributeName)用于将段落样式应用于Cocoa中的文本.文本存储在一个NSAttributedString,但是在该字符串中定义"段落"的内容 - 它是换行符\n吗?其他人物?如果它是a \n,那么如何在不启动新段落的情况下创建新行.最后,当您将ParagraphStyle附加到字符串时,是否必须使用整个段落的确切范围,或者可以将其放在段落中的任何子范围内.如果它可以是子范围,系统如何处理同一段落上的两个或多个ParagraphStyles?
谢谢,罗布
在我的objective-c程序中,无论系统的默认浏览器是什么,我都需要在Safari中打开一个URL.这意味着这不起作用,因为它可以启动Firefox或其他任何浏览器:
NSWorkspace * ws = [NSWorkspace sharedWorkspace];
[ws openURL: url];
Run Code Online (Sandbox Code Playgroud)
我想我很接近这个:
[ws launchAppWithBundleIdentifier: @"com.apple.Safari"
options: NSWorkspaceLaunchWithoutActivation
additionalEventParamDescriptor: NULL
launchIdentifier: nil];
Run Code Online (Sandbox Code Playgroud)
只需要弄清楚如何传递URL作为参数......有更简单的方法吗?
谢谢!
更新:以下代码使用我想要的URL启动Safari,但Safari立即终止!任何想法为什么会这样?
NSWorkspace * ws = [NSWorkspace sharedWorkspace];
[ws openURLs: urls withAppBundleIdentifier:@"com.apple.Safari"
options: NSWorkspaceLaunchDefault
additionalEventParamDescriptor: NULL
launchIdentifiers: NULL];
Run Code Online (Sandbox Code Playgroud)
我观察到了同样的行为LSOpenFromURLSpec.如果Safari实例正在运行,它可以正常工作.如果没有运行Safari实例,它将启动一个新实例并立即终止它.
更新2: Safari仅在嵌入了Flash的网站崩溃.根据上面的代码,我可以很好地打开google.com,例如,Safari会崩溃为YouTube视频.
我正在从NSURLConnection类的服务器下载一些非常大的数据.
如何实现暂停功能以便我可以继续下载?
我有这个对stringwithcontentsofurl的调用:
[NSString stringWithContentsOfURL:url usedEncoding:nil error:nil];
Run Code Online (Sandbox Code Playgroud)
我怎么能给出一个简单的超时?我不想使用线程或操作队列(url的内容大约是100个字符),我只是不想在连接缓慢时等待太久.
我的朋友看到了我的代码,其中一部分是从URL获取plist数据
他告诉我不要使用Synchronous,使用ASynchronous
但我不知道如何以简单的方式进行异步
这是我在程序中使用的代码
NSURL *theURL = [[NSURL alloc]initWithString:@"http://someurllink.php" ];
NSURLRequest *theRequest=[NSURLRequest requestWithURL:theURL
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
NSData *returnData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:nil error:nil];
NSString *listFile = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
self.plist = [listFile propertyList];
[self.tableView reloadData];
[listFile autorelease];
Run Code Online (Sandbox Code Playgroud)
如何更改我的代码使用ASynchronous来获取数据?
非常感谢所有回复和答案:)
给出一个像index.html这样的本地URL地址
现在我需要用UIWebView它来加载iPad.我按照以下步骤操作:
创建NSURL
NSURL *url = [NSURL fileURLWithPath:@"http://mysite.com#page1"];
Run Code Online (Sandbox Code Playgroud)使用UIWebView加载本地HTML/JS/CSS等
[webView loadRequest:[NSURLRequest requestWithURL:url]];
Run Code Online (Sandbox Code Playgroud)但是它不起作用,因为"#"被转换为"%23",所以URL字符串是
http://mysite.com%23page1
我的问题是,如何解决这个自动转换问题,并让UIWebView访问包含哈希片段"#"的URL?
cocoa ×3
iphone ×3
nsstring ×2
nsurl ×2
asynchronous ×1
core-data ×1
foundation ×1
ios ×1
macos ×1
nsindexpath ×1
nstextview ×1
nsurlrequest ×1
nsworkspace ×1
nsxmlparser ×1
parsing ×1
path ×1
safari ×1