我正在尝试实现dropBox同步,需要比较两个文件的日期.一个在我的dropBox帐户上,一个在我的iPhone上.
我想出了以下内容,但我得到了意想不到的结果.我想在比较这两个日期时我做了一些根本错误的事情.我只是使用了> <运算符,但我想这并不好,因为我正在比较两个NSDate字符串.开始了:
NSLog(@"dB...lastModified: %@", dbObject.lastModifiedDate);
NSLog(@"iP...lastModified: %@", [self getDateOfLocalFile:@"NoteBook.txt"]);
if ([dbObject lastModifiedDate] < [self getDateOfLocalFile:@"NoteBook.txt"]) {
NSLog(@"...db is more up-to-date. Download in progress...");
[self DBdownload:@"NoteBook.txt"];
NSLog(@"Download complete.");
} else {
NSLog(@"...iP is more up-to-date. Upload in progress...");
[self DBupload:@"NoteBook.txt"];
NSLog(@"Upload complete.");
}
Run Code Online (Sandbox Code Playgroud)
这给了我以下(随机和错误)输出:
2011-05-11 14:20:54.413 NotePage[6918:207] dB...lastModified: 2011-05-11 13:18:25 +0000
2011-05-11 14:20:54.414 NotePage[6918:207] iP...lastModified: 2011-05-11 13:20:48 +0000
2011-05-11 14:20:54.415 NotePage[6918:207] ...db is more up-to-date.
Run Code Online (Sandbox Code Playgroud)
或者这个恰好是正确的:
2011-05-11 14:20:25.097 NotePage[6903:207] dB...lastModified: 2011-05-11 13:18:25 +0000
2011-05-11 14:20:25.098 NotePage[6903:207] iP...lastModified: 2011-05-11 13:19:45 +0000 …Run Code Online (Sandbox Code Playgroud) 我想知道如何大写在一个对象中找到的字符串NSMutableArray.
一个NSArray包含字符串'April'索引2.
我想这是改变'APRIL'.
这样简单吗?
viewNoteDateMonth.text = [[displayDate objectAtIndex:2] capitalized];
Run Code Online (Sandbox Code Playgroud) 作为初学者,我正在努力与iCloud合作.有一些样本,但它们通常非常详细(在开发者论坛上有一个用于iCloud和CoreData的大量).在苹果的文档都OK,但我仍然无法看到大局.所以请耐心等待,其中一些问题非常重要,但可能很容易回答.
上下文:我有一个非常简单的iCloud应用程序运行(下面的完整示例代码).只有一个UITextView显示给用户,他/她的输入保存在名为text.txt的文件中.

txt文件被推送到云端并可供所有设备使用.效果很好,但是:
主要问题:不使用iCloud的用户怎么办?
当我启动我的应用程序(请参阅下面的代码)时,我会检查用户是否启用了iCloud.如果启用了iCloud,一切都很好.该应用程序继续前进,在云端查找text.txt.如果找到,它将加载它并将其显示给用户.如果在云中找不到text.txt,它将只创建一个新的text.txt并将其显示给用户.
如果用户未启用iCloud,则不会发生任何事情.如何让非iCloud用户仍然可以使用我的文本应用程序?或者我只是忽略它们?我是否需要为非iCloud用户编写单独的功能?即我只是从文档文件夹中加载text.txt的函数?
处理iCloud中的文件的方式与处理应用程序沙箱中的所有其他文件的方式相同.
但是,在我的情况下,没有"正常"的应用程序沙箱了.它在云端.或者我是否总是首先从磁盘加载我的text.txt然后检查iCloud是否有更新的东西?
相关问题:文件结构 - 沙箱与云
也许我的主要问题是对iCloud应该如何工作的基本误解.当我创建一个UIDocument的新实例时,我将不得不覆盖两个方法.首先- (BOOL)loadFromContents:(id)contents ofType:(NSString *)typeName error:(NSError **)outError从云端获取文件,然后-(id)contentsForType:(NSString *)typeName error:(NSError **)outError将文件导入云端.
我是否必须合并单独的功能,这些功能还会将text.txt的本地副本保存到我的沙盒中?这适用于非iCloud用户吗?据我了解iCloud,它会自动保存text.txt的本地副本.因此,我不应该需要将任何内容保存到我的应用程序的"旧"沙箱中(即过去曾经是旧的,在iCloud之前的日子).现在,我的沙箱完全是空的,但我不知道这是否正确.我应该在那里保留另一份text.txt吗?这感觉就像是混乱了我的数据结构...因为云中有一个text.txt,一个位于我设备上的iCloud沙箱中(即使我离线也会工作),还有一个位于旧沙箱中的第三个我的应用......
我的代码:一个简单的iCloud示例代码
这基于我在开发人员论坛和WWDC会话视频中找到的示例.我将它剥离到最低限度.我不确定我的MVC结构是否有用.该模型在AppDelegate中并不理想.欢迎任何改善它的建议.
编辑:我试图提取主要问题并发布[在这里].4
概述:

从云中加载text.txt的最重要的一点:
// AppDelegate.h
// iCloudText
#import <UIKit/UIKit.h>
@class ViewController;
@class MyTextDocument;
@interface AppDelegate : UIResponder <UIApplicationDelegate> {
NSMetadataQuery *_query;
}
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) ViewController *viewController;
@property (strong, nonatomic) MyTextDocument *document;
@end
// AppDelegate.m
// iCloudText
#import "AppDelegate.h"
#import "MyTextDocument.h"
#import …Run Code Online (Sandbox Code Playgroud) 我想知道如何限制用户在编辑UITextField时可以输入的LINES(不是其他问题中提到的字符)的数量.
理想情况下,我想将输入限制为最大值.10行.
我需要从哪里开始?我是用方法做的吗?在
- (BOOL)textViewShouldBeginEditing:(UITextView *)aTextView
Run Code Online (Sandbox Code Playgroud) 我想这是一个初学者的问题,但我试图检查iPhone上的Documents文件夹中是否存在目录.我阅读了文档并提出了这段代码,遗憾的是,它在BOOL fileExists行中与EXC_BAD_ACCESS崩溃:
-(void)checkIfDirectoryAlreadyExists:(NSString *)name
{
NSFileManager *fileManager = [[NSFileManager alloc] init];
NSString *path = [[self documentsDirectory] stringByAppendingPathComponent:name];
BOOL fileExists = [fileManager fileExistsAtPath:path isDirectory:YES];
if (fileExists)
{
NSLog(@"Folder already exists...");
}
}
Run Code Online (Sandbox Code Playgroud)
我不明白我做错了什么?它看起来对我来说都很完美,它肯定符合文档,不是吗?关于我哪里出错的任何启示都将受到高度赞赏!谢谢.
更新:
还是行不通...
-(void)checkIfDirectoryAlreadyExists:(NSString *)name
{
NSFileManager *fileManager = [[NSFileManager alloc] init];
NSString *path = [[self documentsDirectory] stringByAppendingPathComponent:name];
BOOL isDir;
BOOL fileExists = [fileManager fileExistsAtPath:path isDirectory:&isDir];
if (fileExists)
{
if (isDir) {
NSLog(@"Folder already exists...");
}
}
}
Run Code Online (Sandbox Code Playgroud) 我想知道如何找出子视图(在我的情况下是pageShadowView)是否已添加到我的视图中.
我想出了这个,但它确实不起作用:
if ([pageShadowView isKindOfClass:[self.view class]]) {
[self.view addSubview:pageShadowView];
}
Run Code Online (Sandbox Code Playgroud)
而且,我仍然对自我感到困惑.我知道这与明确我们正在谈论当前ViewController的视图有关...但如果(1)没有其他ViewControllers或(2)如果它真的不重要,我真的需要它吗?因为如果我想引用另一个viewController,我一定要调用它吗?
如果这一切都非常基本,我很抱歉,但我非常感谢你的评论.
我正在尝试将旧项目转换为ARC.我有一个创建UUID的函数,但显然在使用ARC时不再支持:
NSString *uuid = nil;
CFUUIDRef theUUID = CFUUIDCreate(kCFAllocatorDefault);
if (theUUID) {
uuid = NSMakeCollectable(CFUUIDCreateString(kCFAllocatorDefault, theUUID));
//[uuid autorelease];
CFRelease(theUUID);
}
Run Code Online (Sandbox Code Playgroud)
我收到编译器错误(尝试转换时):'NSMakeCollectable'不可用:在自动引用计数模式下不可用.
所以我的问题是:如何在使用ARC时创建UUID?还有其他方法我现在应该使用吗?
我试图找出设备是纵向还是横向模式.如果设备没有朝上,我的代码工作得很好.如果它面朝上(和方向== 5),它将无法区分肖像和风景.如果UIDeviceOrientation是FaceUp,有没有在风景/肖像方面确定"方向"?
我的代码:
UIDeviceOrientation interfaceOrientation = [[UIDevice currentDevice] orientation];
NSLog(@"orientation: %d", interfaceOrientation);
if (interfaceOrientation == UIDeviceOrientationIsLandscape(interfaceOrientation)) {
NSLog(@"LANDSCAPE!!!");
}
if (interfaceOrientation == UIDeviceOrientationIsPortrait(interfaceOrientation)) {
NSLog(@"PORTRAIT!!!");
}
Run Code Online (Sandbox Code Playgroud) iphone cocoa-touch ipad landscape-portrait uideviceorientation
初学者的问题:我敢把常量引入我的小程序中.我第一次抵制,但后来我想我应该试一试......看看它不起作用.
好的,这是我放在.m文件的第一行:
#define kPageCurlSpeed = 2.5;
Run Code Online (Sandbox Code Playgroud)
这就是我在我的方法中所做的:
[UIView setAnimationDuration:kPageCurlSpeed];
Run Code Online (Sandbox Code Playgroud)
并且看哪......它不起作用,我得到编译器消息"预期表达式"="令牌"...我不知道如何将其翻译成英语.
我认为编译器只是用2.5替换kPageCurlSpeed - 所以这不应该导致任何问题.但我猜这只是理论.
任何帮助将非常感谢.
我正在尝试在用户输入文本时实现UITextView的简单字符数(即它应该连续更新).
我有两个问题.
(1)首先是我不知道我应该在哪种方法中使用charCount方法.textViewShouldBeginEditing不起作用,因为它只是询问编辑会话是否应该开始.textView:shouldChangeTextInRange也不起作用,因为它再次询问是否允许开始编辑.我在Apple doc中找不到其他有用的方法.
(2)下一个问题:我试图从另一个方法中调用我的charCount方法.但是我得到了编译错误:'ViewController'可能无法响应'charCount'.
这是我的谦卑尝试:
- (IBAction)charCount:(id)sender {
// all chars
int charsAsInt = (int)(textView.text.length);
NSString *newText = [[NSString alloc] initWithFormat:@"All chars: %d", charsAsInt];
allCharacters.text = newText;
[newText release];}
- (BOOL)textViewShouldBeginEditing:(UITextView *)aTextView {
[self charCount];}
Run Code Online (Sandbox Code Playgroud)
我想这与我试图调用IBAction定义的方法有关,这不起作用.但是,在非IBAction方法中调用IBAction方法的正确方法是什么?
一如既往,我很抱歉这些非常基本的问题,我非常感谢每一个小小的帮助,让我的初学者能够理解这一点.
cocoa-touch ×9
iphone ×8
objective-c ×8
ios ×3
uitextview ×2
icloud ×1
ipad ×1
nsdate ×1
nsstring ×1
string ×1
uiview ×1
uppercase ×1