小编Ale*_*lom的帖子

解决方法在Objective-C中完成受保护的属性

我一直在尝试找到一种解决方法来在Objective-C中声明@protected属性,因此只有层次结构中的子类才能访问它们(只读,而不是写入).我读到没有记录的方法这样做,所以我想到了这个解决方法,我想问一下StackOverflow对它的看法.

层次结构顶部的每个自定义类都包含三个类,一个实现和两个接口.我们给它们命名:

ClassA.h
ClassA_protected.h
ClassA.m
Run Code Online (Sandbox Code Playgroud)

那么这个ClassA的任何子类都会像往常一样:

ClassB.h
ClassB.m
Run Code Online (Sandbox Code Playgroud)

首先,我创建了接口ClassA.h,其中我声明了一个受保护的int变量,因此ClassA的任何子类都可以访问它:

@interface ClassA : NSObject{
    @protected
    int _myProtectedInt;
}
@end
Run Code Online (Sandbox Code Playgroud)

下一步是我正在谈论的解决方法.但是,一旦你阅读它,你会发现它非常直接.我声明了第二个名为ClassA_protected.h的接口,它实际上是ClassA.h 的扩展,允许我们将属性标记为readonly:

#import "ClassA.h"
@interface ClassA ()
@property (nonatomic , readonly) int myProtectedInt;
@end
Run Code Online (Sandbox Code Playgroud)

准备受保护层次结构的最后一步是在ClassA.m中声明它的实现,我们只合成我们的属性:

#import "ClassA_protected.h"
@implementation ClassA
@synthesize myProtectedInt = _ myProtectedInt;
@end
Run Code Online (Sandbox Code Playgroud)

这样,每个需要成为ClassA.h子类的类都将导入ClassA_protected.h.因此,像ClassB.h这样的孩子如下:

#import "ClassA_protected.h"
@interface ClassB : ClassA
@end
Run Code Online (Sandbox Code Playgroud)

以及从ClassB.m的实现中访问此属性的示例:

@implementation ClassB
-(void) method {
    //edit protected variable 
    _myProtectedInt= 1; …
Run Code Online (Sandbox Code Playgroud)

properties protected objective-c

39
推荐指数
2
解决办法
1万
查看次数

typedef NS_ENUM vs typedef enum

采用现代Objective-C指南时,Apple建议使用NS_ENUM宏而不是枚举.我还阅读了NSHipster关于NS_ENUM和NS_OPTIONS 的解释.

也许我错过了一些东西,但我不太明白以下两个片段之间有什么区别,如果有什么NS_ENUM建议的方法可去(除了可能为了与旧编译器向后兼容)

// typedef enum
typedef enum {
    SizeWidth,
    SizeHeight
}Size;

// typedef NS_ENUM
typedef NS_ENUM(NSInteger, Size) {
    SizeWidth,
    SizeHeight
};
Run Code Online (Sandbox Code Playgroud)

enums objective-c

13
推荐指数
2
解决办法
1万
查看次数

使用SimpleXML很容易解决问题.我做错了什么?

我正在使用Java和SimpleXML

我需要用SimpleXML解析这个XML文件:

<magazine title="N?mero 1" id="1">
    <description>yutyutyu</description>
    <miniature>http://web.com/scripts/getImage.php?idMagazine=1&resource=miniature.jpg</miniature>
    <summary>2</summary>
    <pages>
        <page src="http://web.com/scripts/getImage.php?idMagazine=1&resource=page_001.jpg" id="1" thumbnail="http://web.com/scripts/getImage.php?idMagazine=1&resource=thumbnail_001.jpg">
            <areas>
                <area id="1">
                    <top>188</top>
                    <left>204</left>
                    <width>399</width>
                    <height>319</height>
                    <action type="openBrowser">http://www.web.com</action>
                </area>
                <area id="2">
                    <top>188</top>
                    <left>204</left>
                    <width>399</width>
                    <height>319</height>
                    <action type="openBrowser">http://www.web.com</action>
                </area>
            </areas>
        </page>
        <page src="http://web.com/scripts/getImage.php?idMagazine=1&resource=page_002.jpg" id="2" thumbnail="web.com/scripts/getImage.php?idMagazine=1&resource=thumbnail_002.jpg"/>
        <page src="http://web.com/scripts/getImage.php?idMagazine=1&resource=page_003.jpg" id="3" thumbnail="web.com/scripts/getImage.php?idMagazine=1&resource=thumbnail_003.jpg"/>
    </pages>    
</magazine>
Run Code Online (Sandbox Code Playgroud)

我得到了这个例外:

03-22 16:02:35.072:WARN/System.err(1931):org.simpleframework.xml.core.ValueRequiredException:无法满足@ org.simpleframework.xml.ElementList(data = false,empty = true,entry = ,inline = false,name =,required = true,type = void)on field'area'public java.util.ArrayList com.Magazine.Page.areas for class com.Magazine.Page at line 1

杂志有一系列页面,每个页面都有一系列区域,每个区域都有一个动作类,其中包含更多内容.问题必须在区域数组上,因此它位于Page类中.

@Root (name="magazine")
public class FullMagazine {
    @Attribute
    String …
Run Code Online (Sandbox Code Playgroud)

java xml xml-parsing simple-framework

8
推荐指数
1
解决办法
1万
查看次数

两个NSDate之间的日期比较

这是我第一次比较Objective-C中的日期.我一直在网上搜索一段时间,我发现的所有例子都涉及从字符串构建一个NSDate,所以我决定在这里问一个新问题......我的问题如下:

我需要知道两个NSD是否在同一天,忽略了时间.我有两个NSArray包含一组日期,我需要逐个确定第一个NSArray中的哪一个与第二个数组在同一天.

- (void)setActiveDaysColor:(UIColor *)activeDaysColor
{
    for (DayView *actualDay in _days)
    {
        NSDate *actualDayDate = [actualDay date];

        for (NSDate *activeDayDate in self.dates)
        {
            // Comparison code
            // If both dates are the same, tint actualDay with a different color
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

提前谢谢你,祝你有个愉快的一天.

亚历克斯.

date objective-c nsdate ios

1
推荐指数
1
解决办法
5014
查看次数