小编5St*_*yan的帖子

适当的Objective-C助手"Wannabe"私人方法?

虽然我讨厌在这个问题上击败一匹马(我已经阅读了关于此的各种文章),但我想在创建我自己的"自己的约定"之前获得更多关于这个问题的意见,以便在编写时使用在Objective-C中.

我想弄清楚的约定最终是如何(使用生产级代码的最佳编码实践)在类中使用私有方法.来自C#的后台,当我编写类时,通常会有一个代码块在多个公共方法中重复(例如错误检查或WCF服务连接设置).我通常会创建一个此代码块,并将其放在一个私有方法中,仅供这些公共方法访问.这样,如果我需要进行更改,我只需要在一个位置执行此操作,而不是在类中的10个不同位置,但是从不让用户能够调用此私有方法.例如:

public Class A
{
    public void method1()
    {
        doErrorChecking()
        // Do more stuff
    }
    public void method2()
    {
        doErrorChecking()
        // Do more stuff
    }     
    private doErrorChecking() { //Error Checking Code}
}
Run Code Online (Sandbox Code Playgroud)

我知道没有真正的方法可以在Objective-C中真正使最后一个方法成为私有,但是我真的想确保当我在Objective-C中为iOS开发创建所有未来的类时,我遵循可用的最佳实践未来的代码重构将不再需要(希望如此).我注意到人们谈论类别,其他人只是不把方法放在@interface文件中,其他人使用扩展方法.目前我只是将方法实现放在@implementation文件中,而不是接口文件.我也让"想要"的私有方法有一个非常独特的名称,以便子类或覆盖方法不是问题.这是我应该遵循的道路吗?或者对于这些特定场景,有更好的方法吗?

c# objective-c private-members

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

C#:将文本文件内容与字符串变量进行比较

我有一个将文本转储到文本文件的应用程序.我认为文本可能存在一个问题,即不包含正确的回车符,因此我正在编写一个测试,将该文件的内容与我在代码中声明的字符串变量进行比较.

例如:

1)代码创建一个包含文本的文本文件:

This is line 1
This is line 2
This is line 3
Run Code Online (Sandbox Code Playgroud)

2)我有以下字符串,我想比较它:

string testString = "This is line 1\nThis is line 2\nThis is line3"
Run Code Online (Sandbox Code Playgroud)

据我所知,我可以打开文件流阅读器并逐行读取文本文件并将其存储在可变字符串变量中,同时在每行后附加"\n",但想知道这是否重新发明了轮子(换句话说, .NET有一个类似于此的内置类).提前致谢.

.net c# string file-io compare

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

iOS:如何保存在应用程序中创建的自定义对象

我一直在阅读保存对象,保存状态等,但在保存从我的应用程序创建的对象时,我仍然会对我应该采取的路线感到困惑.我已经构建了一个应用程序,用户可以使用类型,名称和频率创建一个无线电台.一旦用户点击保存,就会使用自定义类创建"RadioStation"对象,并将其存储在放置在RootViewController中的NSMutableArray中.虽然RadioStation对象可以存储在此数组中并在表视图中正确显示,但很明显,一旦应用程序退出,应用程序将不再保留这些对象.

在这一点上,我不确定如何开始设计这个设计.我需要设置一个plist吗?我应该将Core Data与SQLite DB一起使用吗?我是否需要针对这两种情况研究iOS对象序列化?还是有一种我不知道的更直接的方式?

xcode core-data objective-c plist ios

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

弹出其他视图控制器时如何更改popoverview大小

我使用提供的模板创建了一个裸骨主/细节iPad应用程序.它创建了两个视图控制器(主控和详细信息).我创建了一个视图,它可以在主视图控制器的顶部弹出另外的视图控制器(几乎钻取了桌面视图,直到最后命中一个填充详细视图的单元格.我已经添加了下面的代码来加载主视图控制器弹出窗口到指定的尺寸(下面的代码也显示从主视图控制器tableview中选择选择时):

@implementation MasterViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        self.vehicles = [[NSArray alloc] initWithObjects:@"Cars", @"Trucks", @"Boats", nil];

        self.title = @"Vehicle Type";
        self.clearsSelectionOnViewWillAppear = NO;
        self.contentSizeForViewInPopover = CGSizeMake(320.0, [vehicles count] * 52.0);
    }
    return self;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (!self.studySessionViewController)
    {
        self.secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
    }
    [self.navigationController pushViewController:self.secondViewController animated:YES];
}
Run Code Online (Sandbox Code Playgroud)

当应用程序首次加载时选择弹出窗口时,一切看起来都很棒.但是,当用户单击回MasterViewController时,弹出窗口的大小与在堆栈上推送的最大视图控制器大小相同.我一直在搜索,我在主视图控制器类中添加了以下代码:

- (void)viewWillAppear:(BOOL)animated
{
    self.contentSizeForViewInPopover = CGSizeMake(320.0, [vehicles count] * 52.0);
    [super viewWillAppear:animated];
}

- (void)viewDidAppear:(BOOL)animated
{ …
Run Code Online (Sandbox Code Playgroud)

cocoa-touch objective-c uipopover ios5

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

适用于iOS 5.1及更低版本的UISplitViewController中的UIPopoverController手势处理

我(以及其他许多人)已经注意到Apple改变了popover控制器的外观以使用"滑块"窗口,而不是我使用的通常的"popover"tableview.虽然我对新外观感到满意,但就像其他人一样,我遇到了滑动手势的问题:

iOS 5.1滑动手势被UISplitViewController劫持 - 如何避免?

对此的修复似乎是将拆分视图控制器方法"presentWithGesture"设置为"NO".

UISplitViewController *splitViewController = [[UISplitViewController alloc] init];
splitViewController.presentsWithGesture = NO;
Run Code Online (Sandbox Code Playgroud)

如果用户使用iOS 5.1,这非常有用,但是,如果使用iOS 5.0或更低版本运行此代码,则抛出异常,因为此方法仅适用于iOS 5.1:

Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: '-[UISplitViewController setPresentsWithGesture:]: unrecognized selector 
Run Code Online (Sandbox Code Playgroud)

是否有可能在不使用此方法的情况下摆脱此手势,以便它向后兼容iOS 5.0及以下版本?

objective-c gestures uisplitviewcontroller uipopovercontroller ios5

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

字典plist中的浮点数

我有两个问题.第一个问题是关于plist中使用的字典数据类型.

我有几个类方法返回特定的浮点数.我不想在代码中对它们进行硬编码,而是将它们放在plist中,以防它们发生变化.这里有几个类方法:

+ (double) returnMinUsableFloatNumber
{
   return 0.005; 
}

+ (double) returnMaxUsableFloatNumber
{
   return 129.11
}
Run Code Online (Sandbox Code Playgroud)

我创建了一个plist并使用字典保存它,我创建了几个键:"minNumber"和"maxNumber".但是,值的唯一数据类型是"Bool,Data,Date,Number,String".该数字是一个整数,并切断输入的任何小数.虽然完全可以只存储为字符串并稍后转换为double,但是可以在plist字典中存储double作为值以消除此步骤吗?

此外,如何访问此字典,因为这些是类方法,并且不能使用字典实例变量来初始化plist中使用的字典.

例如:

+ (double) returnMinUsableFloatNumber
{
   return \\ value returned from key "minNumber"
}
Run Code Online (Sandbox Code Playgroud)

dictionary objective-c plist

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

是否可以实例化具有变量名称的对象,或者在运行时访问变量名称?

我有很多代码行创建对象并使用具有类似对象名称和构造函数的各种参数.唯一要改变的是正在创建的对象变量的实际名称,以及传入的对象本身的名称.以下是与我当前设置匹配的代码示例:

BackyardObject backyardObject0 = new BackyardObject(cat0, dog0, goat0, piglet0);
BackyardObject backyardObject1 = new BackyardObject(cat1, dog1, goat1, piglet1);
BackyardObject backyardObject2 = new BackyardObject(cat2, dog2, goat2, piglet2);
BackyardObject backyardObject3 = new BackyardObject(cat3, dog3, goat3, piglet3);
BackyardObject backyardObject4 = new BackyardObject(cat4, dog4, goat4, piglet4);
// many many more BackyardObjects being instantiated
Run Code Online (Sandbox Code Playgroud)

我们可以看到,正在创建的对象的名称与传递给构造函数的对象的名称完全匹配.是否有可能创建一个可以设置所有这一切的循环?

编辑

我想我可能缺乏为这个问题得到正确答案所需的细节.这不是关于"如何"使用循环的问题,或者如何将项目添加到集合中更多的问题是确定是否可以在循环内动态创建"变量名称",同时访问动态在循环内的另一个变量名提供了上面给出的信息(只是在现场编写代码).

// psuedo code for something I'm asking is possible
for( i = 0; i < 10; i++)
{
    // create BackyardObject with generic name, while appending "i" to 
    // …
Run Code Online (Sandbox Code Playgroud)

c# for-loop runtime

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