在Objective-C中,有没有办法在运行时列出特定类的类别?
使用Objective-C运行时函数,我可以获得类和实例方法,类层次结构,实例变量等的详细信息,但看起来不是类别信息.
看看F-Script,我发现它没有显示类别信息(实际上,它似乎根本不显示类别的方法).另一方面,类转储提取类别信息,但这是来自二进制而不是运行时.
在objc/runtime.h中提到了struct objc_category,但这看起来是私有的.有支持的方式吗?
我正在编写一个iOS应用程序,它具有人员记录存储,并且需要显示以特定方式排序的列表.这些排序有可变数量,它们是动态生成的,但我希望它们存储在数据存储区中.执行此操作的SQL方法是使ListPositions表具有列表名称,人员表中的id和排序键.然后,为了显示特定列表,我可以选择具有给定名称的所有列表ListPosition,拉入引用的人员,并对排序键进行排序.尝试在CoreDatat中执行此操作,但是我遇到了问题.我试图使用如下架构来做到这一点:
Person:
Name
DOB
etc...
positions -->> ListPosition
ListPosition:
listName
sortKey
person --> Person
Run Code Online (Sandbox Code Playgroud)
然后,我可以使用NSPredicate获取给定列表中的所有人员
[NSPredicate predicateWithFormat:@"ANY positions.listName like %@", someList];
这允许我针对大量人员动态添加列表.问题是我无法使用ListPosition的sortKey字段对Persons进行排序.NSSortDescriptor会做什么?如果无法对多对多关系的一个元素的属性进行获取,那么在coredata中获取多个动态排序的另一种方法是什么?我正在使用NSFetchedResultsController显示列表,因此我无法将这些列表放在内存中.我需要使用单个NSFetchRequest来完成它.
function connectTo(url) {
var xhr = new XMLHttpRequest();
xhr.open("GET", url, false);
xhr.onreadystatechange = function () {
if (xhr.readyState == xhr.DONE) {
throw "Troubles.";
}
};
xhr.send();
}
try {
connectTo("http://www.google.com");
} catch (e) {
console.log('Exception happend.');
}
Run Code Online (Sandbox Code Playgroud)
也许"catch"部分将执行(在控制台中显示消息),但异常保持未捕获状态(=在控制台中显示"Uncaught Troubles".).为什么?
我一直在和Scalaz一起玩,以获得scala的一点点haskell感觉.为了理解scala中的工作原理,我开始自己实现各种代数结构,并且遇到了Scalaz人员提到过的行为.
这是我实现仿函数的示例代码:
trait Functor[M[_]] {
def fmap[A, B](a: M[A], b: A => B): M[B]
}
sealed abstract class Foo[+A]
case class Bar[A]() extends Foo[A]
case class Baz[A]() extends Foo[A]
object Functor {
implicit val optionFunctor: Functor[Option] = new Functor[Option]{
def fmap[A, B](a: Option[A], b: A => B): Option[B] = a match {
case Some(x) => Some(b(x))
case None => None
}
}
implicit val fooFunctor: Functor[Foo] = new Functor[Foo] {
def fmap[A, B](a: Foo[A], b: A => B): Foo[B] = …Run Code Online (Sandbox Code Playgroud) 我new_tag从带有self.response.get("new_tag")和selected_tags来自复选框字段的表单文本字段中获取
self.response.get_all("selected_tags")
Run Code Online (Sandbox Code Playgroud)
我把它们组合成这样:
tag_string = new_tag
new_tag_list = f1.striplist(tag_string.split(",") + selected_tags)
Run Code Online (Sandbox Code Playgroud)
(f1.striplist是一个删除列表中字符串内部空格的函数.)
但是在tag_list空的情况下(没有输入新标签)但有一些selected_tags,new_tag_list包含一个空字符串" ".
例如,来自logging.info:
new_tag
selected_tags[u'Hello', u'Cool', u'Glam']
new_tag_list[u'', u'Hello', u'Cool', u'Glam']
Run Code Online (Sandbox Code Playgroud)
如何摆脱空字符串?
如果列表中有空字符串:
>>> s = [u'', u'Hello', u'Cool', u'Glam']
>>> i = s.index("")
>>> del s[i]
>>> s
[u'Hello', u'Cool', u'Glam']
Run Code Online (Sandbox Code Playgroud)
但是如果没有空字符串:
>>> s = [u'Hello', u'Cool', u'Glam']
>>> if s.index(""):
i = s.index("")
del s[i]
else:
print "new_tag_list …Run Code Online (Sandbox Code Playgroud) 我有一个navigationBar,它的标题上有UIImage,如下所示:
self.navigationItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"top_logo.png"]];
Run Code Online (Sandbox Code Playgroud)
当我选择一行时,不会出现"后退"按钮.为什么?
我在其他的viewControllers上有完全相同的代码,它出现了.我不明白为什么......
谢谢,
RL
让我举个例子来解释一下.在Delphi中,您可以编写
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key = ^C then
ShowMessage('The user wants to copy something.')
else if Key = ^V then
ShowMessage('The user wants to paste.')
end;
Run Code Online (Sandbox Code Playgroud)
检查Ctrl + C和Ctrl + V键盘命令.实际上,相同的语法适用于Ctrl + A,其中A是任何字符,当然 - 您也可以使用case语句而不是ifs.你甚至可以做ShowMessage(^A),所以,显然,^A被认为是char.
但是,在浏览官方Delphi文档时,我找不到任何对此语法的引用.但也许^A语法是如此常见,以至于它被理解为底层纯文本文件格式的一部分?或者它只是Delphi编程语言的一个未记录的功能?(请注意,上述结构实际上是在RTL/VCL源代码中使用的.但是,当然,只有Embarcadero和Embarcadero才允许使用未记录的功能,如果有的话.)
我想在我的公共目录中显示一个位置的图像.在我的模型中,我为图像创建了一条路径,但是当我在show动作中调用它时,它只显示字符串.
def img_path
"<img src='/system/assets/10/original/airplane.jpg'>"
end
Run Code Online (Sandbox Code Playgroud)
这是html:
<td><img src='/system/assets/10/original/airplane.jpg'></td>
Run Code Online (Sandbox Code Playgroud) 对于我的应用程序所依赖的所有库项目,升级到xcode 4后出现错误.
[BEROR]没有要编译的体系结构(ONLY_ACTIVE_ARCH = YES,活动arch = i386,VALID_ARCHS = armv6).
我正在使用MVC3,并使用Entity Framework 4.0实体作为我的模型.到目前为止,就使用它作为模型而言,一切都很有效(所有的crud操作/页面生成开箱即用).我想知道,你如何获得与手动生成模型时相同的强大标签和验证信息?
这是我的意思的一个例子.这是一个由MVC3示例项目生成的类:
public class LogOnModel
{
[Required]
[Display(Name = "User name")]
public string UserName { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[Display(Name = "Remember me?")]
public bool RememberMe { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
通过上面的示例,您可以指定在字段的标签中显示的内容(显示)以及要使用的字段类型(密码).但是,当我尝试使用实体框架并将其推送到下面的视图时,我看到自动生成的标签只是字段名称,而不是我希望用户看到/必须阅读的内容:
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Person</legend>
<div class="editor-label">
@Html.LabelFor(model => model.FirstName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.FirstName)
@Html.ValidationMessageFor(model => model.FirstName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.MiddleName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.MiddleName)
@Html.ValidationMessageFor(model => model.MiddleName) …Run Code Online (Sandbox Code Playgroud) ios ×2
iphone ×2
asp.net-mvc ×1
c#-4.0 ×1
categories ×1
character ×1
cocoa-touch ×1
core-data ×1
delphi ×1
javascript ×1
keyboard ×1
list ×1
objective-c ×1
python ×1
runtime ×1
scala ×1
scalaz ×1
syntax ×1
xcode ×1
xcode4 ×1