请原谅我这里可能有些愚蠢的问题,但在其他编程语言(PHP或Perl等脚本编写语言)中,通常很容易转储变量中包含的所有内容.
例如,在PHP中有var_dump()或print_r()函数.Perl有Data::DumperCPAN类等.
Objective-C有这样的东西吗?在少数情况下,能够转储所有内容非常方便,而不是使用gdb来检查每个变量.
说我上课了
@interface Person : NSObject { NSString *name; }
Run Code Online (Sandbox Code Playgroud)
我需要在课堂上获得NSString的名字
Person *person = [[Person alloc] init];
NSLog(@"Name of variable %s\n", _NameofVariable_(person->name));
Run Code Online (Sandbox Code Playgroud)
感谢您的回答,这是我从回复中提出的解决方案
//returns nil if property is not found
-(NSString *)propertyName:(id)property {
unsigned int numIvars = 0;
NSString *key=nil;
Ivar * ivars = class_copyIvarList([self class], &numIvars);
for(int i = 0; i < numIvars; i++) {
Ivar thisIvar = ivars[i];
if ((object_getIvar(self, thisIvar) == property)) {
key = [NSString stringWithUTF8String:ivar_getName(thisIvar)];
break;
}
}
free(ivars);
return key;
}
Run Code Online (Sandbox Code Playgroud) 来自Flex-Flash IDE,我能够在我的代码中设置断点,并在运行时查看相应窗口中变量的值.
现在,我想出了我可以在Xcode中找到"变量"窗口的位置,我可以在那里看到所有变量但是这些变量的值无法看到.我只有数据类型和一堆十六进制数字(指针?).
我该怎么调试我的代码?我在哪里可以看到我的变量的值而无需在我的代码中记录它们?
我试图NSDictionary用一堆键/值对来查看a的值.但也是其他任何NSObject事情.我已经阅读了一些有关覆盖描述方法的内容但是本机对象呢?
我想知道是否可以确定Objects属性的类或基本类型.获取所有属性名称和值非常简单.所以回答
那么有什么方法可以获得属性类类型,而属性没有值或零值?
示例代码
@interface MyObject : NSObject
@property (nonatomic, copy) NSString *aString;
@property (nonatomic, copy) NSDate *aDate;
@property NSInteger aPrimitive;
@end
@implementation MyObject
@synthesize aString;
@synthesize aDate;
@synthesize aPrimitive;
- (void)getTheTypesOfMyProperties {
unsigned int count;
objc_property_t* props = class_copyPropertyList([self class], &count);
for (int i = 0; i < count; i++) {
objc_property_t property = props[i];
// Here I can easy get the name or value
const char * name = property_getName(property);
// But is there any magic function that …Run Code Online (Sandbox Code Playgroud) 我有一个自定义对象,我创建了3个属性.我创建对象并将值分配给这些属性.之后我把那个物体放进去了NSMutable Array.我知道我可以用:
for (id obj in personArray)
{
NSLog(@"obj: %@", obj);
}
NSLog(@"%@", personArray);
Run Code Online (Sandbox Code Playgroud)
告诉我我的数组中有哪些对象.但是我希望更深入一些,我希望能够看到每个对象的属性.我只是不确定如何定位它们.
这是我正在使用的代码:Person是我的自定义对象.
personObject = [[Person alloc]init];
[personObject setFirstName:firstName.text];
[personObject setLastName:lastName.text];
[personObject setEmail:emailAddress.text];
// add the person object to the array
// the array was alloc and init in a method above this code.
[personArray addObject:personObject];
for (id obj in personArray)
{
NSLog(@"obj: %@", obj);
}
NSLog(@"%@", personArray);
Run Code Online (Sandbox Code Playgroud) 所以我是Xcode的新手,正在研究一个iOS项目,而且我对最基本的调试工作有点兴奋.具体来说,当我逐步完成代码时,我需要能够查看对象的状态(这不是疯了吗?),但我不能为我的生活弄清楚如何在Xcode中执行此操作.
每当我尝试时,似乎我得到的最远的是一个无法扩展以显示其客观内容的内存地址.我也无法找出任何方法甚至手动取消引用调试控制台中的指针来查看该对象的状态.
在这里,我试图查看store.storeHours数组的内容,没有任何运气.实际上左边的视图告诉我数组中有0个对象,当我尝试扩展它时不会显示任何内容,但是当我po store.storeHours在控制台上显示7个对象时,虽然无用地描绘为内存地址.

请告诉我,我不是疯了,我只是错过了一些东西!
更新:事情变得更加怪异!当我突然将变量显示切换为"本地"而不是"自动"时,self.store.storeHours变得完全可导航!我想知道是否有一个小故障访问正确的"storeHours"实例或其他东西,因为当我现在查看它时,它清楚地识别数组中的7个对象!更不用说这些物体是可扩展的,正如我原本希望的那样.

我正在处理一个处理敏感数据的静态库.使用库的开发人员必须不能在库上使用反射.
在Android上,我们通过aar使用services 开发文件并运行service到单独的进程来解决问题;(当服务运行到另一个进程然后开发人员不能使用反射)但我想知道iOS中是否存在类似的东西?
我们可以将静态库执行到单独的进程中吗?如果没有,我们如何避免反思我们的静态库?
例如:
MyTestObject *obj = [[[myTestView alloc] init ];
//===========================================
Class clazz = [obj class];
u_int count;
Ivar* ivars = class_copyIvarList(clazz, &count);
NSMutableArray* ivarArray = [NSMutableArray arrayWithCapacity:count];
for (int i = 0; i < count ; i++)
{
const char* ivarName = ivar_getName(ivars[i]);
[ivarArray addObject:[NSString stringWithCString:ivarName encoding:NSUTF8StringEncoding]];
}
free(ivars);
objc_property_t* properties = class_copyPropertyList(clazz, &count);
NSMutableArray* propertyArray = [NSMutableArray arrayWithCapacity:count];
for (int i = 0; i < count ; i++)
{
const …Run Code Online (Sandbox Code Playgroud) 我正在尝试学习Objective-C中的反射.我已经找到了一些关于如何转储类的属性列表的重要信息,特别是在这里,但我想知道是否可以使用反射设置属性的值.
我有一个键(属性名称)和值(所有NSStrings)的字典.我想使用Reflection获取属性,然后将其值设置为我的字典中的值.这可能吗?还是我在做梦?
这与字典无关.我只是使用字典发送值.
像这个问题,但对于目标C.
- (void)populateProperty:(NSString *)value
{
Class clazz = [self class];
u_int count;
objc_property_t* properties = class_copyPropertyList(clazz, &count);
for (int i = 0; i < count ; i++)
{
const char* propertyName = property_getName(properties[i]);
NSString *prop = [NSString stringWithCString:propertyName encoding:NSUTF8StringEncoding]];
// Here I have found my prop
// How do I populate it with value passed in?
}
free(properties);
}
Run Code Online (Sandbox Code Playgroud) 我有一个NSObject定义如下:
@interface MFMoodMix : NSObject {
NSNumber *m1;
NSNumber *m2;
NSNumber *m3;
NSNumber *m4;
NSNumber *m5;
NSNumber *m6;
NSNumber *m7;
}
Run Code Online (Sandbox Code Playgroud)
有什么方法可以快速遍历所有这些值以找到最大值?例如像UIView一样(UIView*x在view.subviews中),是否有类似的方法可以快速完成此操作?
谢谢
我一直在环顾四周,并没有找到任何关于这样做的事情,我不确定它是否可能,但这就是我想要实现的目标.请注意,我给出了一个非常简单的例子,说明我正在尝试做什么.此外,发布的代码的相似性都是假设的,并不意味着纠正代码语法.它仅用于通过引用类似的类型功能来帮助进一步说明所需的最终结果.所以在提供替代方法之前请先理解这个概念......
用那个说,正如标题所说,我试图看看我是否可以访问一个对象,让我们通过它的字符串名称或变量来说uilabel 而不使用if语句.例如,假设我们有3个uilabes
UILabel *label1;
UILabel *label2;
UILabel *label3;
Run Code Online (Sandbox Code Playgroud)
从那里我们做了所有适当的合成,什么不是.现在在某些时候我想引用一个基于let say和int的标签.
int intNumber = 2;
Run Code Online (Sandbox Code Playgroud)
这是理论部分.我现在想设置一个标签的文本,该标签的名称中包含匹配的int值.
label(%i, intNumber).text = [NSString stringWithFormat:@"This is Label %i", intValue];
Run Code Online (Sandbox Code Playgroud)
结果将是......
label2.text = @"This is Label 2";
Run Code Online (Sandbox Code Playgroud)
如果int值为1,则将更改label1.或者如果它是3,那么label3会被改变,等等......
或者如果使用标签的字符串名称可以完成相同的过程.
int intValue = 1;
NSString *labelName;
Run Code Online (Sandbox Code Playgroud)
然后在某个时候
labelName = [NSString stringWithFormat:@"label%i",intValue];
Run Code Online (Sandbox Code Playgroud)
现在以某种方式通过引用"labelName"来设置label1的文本来调用它.如果有人能提出建议或评论,甚至可以做到这样的事情,我将不胜感激.我知道你可以通过字符串名称引用类和选择器,但我不确定对象?我不知道"valueForKey:"是否应该是我应该这样做的方式?
对不起啰嗦的帖子感到抱歉,但我只是想确定我说出了我想做的事情.
我是一个尝试在Xcode世界中创建它的Web开发人员,我需要在控制台中看到我拥有的数组的内容,我有哪些选择?