iOS newb尝试从另一个类中提取数组并收到错误。从根本上说,我并没有真正理解方法和属性之间的区别,我知道,这可能有助于我更好地理解它。
我创建了一个返回数组的方法。我想在另一个类中使用该数组(就像一个函数在其他语言中返回一个值)所以我想我会这样做:
class1
- (id) getTags{
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Tags"];
fetchRequest.resultType = NSDictionaryResultType;
NSError *error = nil;
NSArray *results = [self.managedObjectContext executeFetchRequest:fetchRequest
error:&error];
NSMutableArray * tags = [[results valueForKey:@"tag"] mutableCopy];
return tags;
}
换句话说,我想使用该方法返回的一种变量,在Objective C中称为属性。该方法也在.h文件中,因此它是公共的。
在第2课中,我将类1导入顶部,然后尝试按如下方式调用方法:
NSArray *newarray = [class1 getTags];
但是我得到错误"选择器getTags"
没有已知的类方法谁能告诉我我做错了什么?
感谢。
答案 0 :(得分:3)
我怀疑这一行;
NSArray *newarray = [class1 getTags];
实际上,你应该使用类实例,而不是类本身。 要使用这种函数调用,你应该将getTags声明为类级函数(+函数),而不是 - 函数
所以你的代码应该是这样的;
class1 *class1Instance = [[class1 alloc] init];
NSArray *newarray = [class1Instance getTags];
答案 1 :(得分:2)
问题是代码$servername = "computername";
$username = "username";
$password = "password";
$dbname = "dbname";
// Create connection
$mysqli = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
?>
您正在NSArray *newarray = [class1 getTags];
中调用类方法getTags
;但是在class1
中只有getTags
的实例方法。
要解决此问题,请将方法签名中的 - 更改为+,这会将您的方法从实例方法更改为类方法。 (在java术语中:+是在方法中放置静态的地方)。
但是,代码中存在很多样式问题。 首先,我认为将代码放入.h是一种很好的做法。您可能想要的是
·H
class1
的.m
@interface Class1
+ (NSArray *)getTags;
@end
所以你在.h文件中声明你的公共接口并在.m中实现。此外,您可能希望将您的班级名称大写。
您不应将@implementation Class1
+ (NSArray *)getTags { ... }
@end
用作返回类型,并将id
从id
分配给[class1 getTags]
。那里有隐式转换,有时可能会导致一些良好的调试时间。
NSArray *
可以用作方法的返回类型,因为NSArray
继承自NSMutableArray
- Apple Documentation of NSMutableArray