相当新的Objective-C试图了解我如何分割我拥有的字符串。我实际上认为我已经拆分了字符串,现在我只想测试它,所以我试图将它设置为textview,得到一个"不兼容的指针类型"警告。我确实在线阅读了一些内容,但是它们与我在课堂上看到的并不匹配,我的教授告诉我们iOS一直在变化,而我可能找到的一些解决方案可能不再适用了。这就是为什么我要来SO,我确实尝试自己找到这些信息,但是所有的SO链接都已经超过2年了,所以我想要安全并重新向使用iOS 7 +的人提出这个问题。
- (IBAction)GetCourse:(id)sender
{
__block NSString * jstring = nil;
__block NSArray * jarray = nil;
dispatch_queue_t progressQueue = dispatch_queue_create("JSON.GetJSONString", NULL);
dispatch_async(progressQueue, ^{
jstring = [JSONHelper JSONgetString:@"http://iam.colum.edu/portfolio/api/course?json=True"];
dispatch_async(dispatch_get_main_queue(), ^{
//main thread code
//textView.text = jstring;
jarray = [jstring componentsSeparatedByString:@" "];
textView.text = jarray;
NSError *error = nil;
NSDictionary *results = [NSJSONSerialization JSONObjectWithData: [jstring dataUsingEncoding:NSUTF8StringEncoding]
options: NSJSONReadingMutableContainers
error: &error];
if (error) NSLog(@"[%@ %@] JSON error: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), error.localizedDescription);
});
});
答案 0 :(得分:2)
您的问题是textView.text
属于NSString
类型的属性,而jarray
属于NSArray
。请尝试将第一个课程名称字符串放在文本视图中:
textView.text = [jarray objectAtIndex:0];
然后尝试这样的方法将整批课程附加到文本视图中:
NSString * fullString = [NSString string];
for(int i = 0; i < jarray.count; i++)
{
fullString = [fullString stringByAppendingString:[jarray objectAtIndex:i]];
}
textView.text = fullString;
更新:在查看JSON响应后,您可能希望拆分您获得的字符串,因为有更简单的方法来获取数据。您想要从JSON响应中序列化NSArray
NSStrings
。您的代码正在尝试将其序列化为NSDictionary
,因为响应(我看到它)是一个字符串数组,而不是值字典。在块的底部试试这个:
NSError *error = nil;
NSArray * resultArray = [NSJSONSerialization JSONObjectWithData: [jstring dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error: &error];
if ( !resultArray ) {
NSLog(@"Error parsing JSON: %@", e);
} else {
for(NSString * course in resultArray) {
NSLog(@"Course: %@", course);
}
}