小编Mik*_*lah的帖子

核心数据存储多个存储的原子性

核心数据允许您将多个持久性存储添加到单个NSPersistentStoreCoordinator(每个具有不同的配置)名称,从而将它们组合在一起NSManagedObjectContext.我无法找到的是Core Data如何处理多个商店的保存操作的原子性.

假设我有两家商店:

NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] init];
[coordinator addPersistentStoreWithType:type configuration:@"A" URL:aURL options:nil error:NULL];
[coordinator addPersistentStoreWithType:type configuration:@"B" URL:bURL options:nil error:NULL];

NSManagedObjectContext *context = [[NSManageObjectContext alloc] init];
[context setPersistentStoreCoordinator:coordinator];
Run Code Online (Sandbox Code Playgroud)

然后是时候保存我这样做:

NSError *error = nil;
BOOL result = [context save:&error];
Run Code Online (Sandbox Code Playgroud)

文档说明事件的顺序是:

  1. 保存商店A.
  2. 保存商店B.

如果商店A保存正确,但商店B由于某种原因无法保存怎么办?(例如,磁盘上的文件被删除,或者权限被设置为只读,那种事情).我找不到任何详细说明Core Data是否会将更改回滚到商店A的文档.

对我来说似乎很奇怪,对象图将保持不一致状态(即一个商店更新,一个没有更新),但在多个商店中执行完全原子保存有点棘手和资源密集.我真的想在这里做一些澄清,也许来自对系统有更多经验的人!

macos cocoa core-data

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

从URL /服务器获取图像

我对iPhone开发很新,并尝试在我的应用程序中获取"来自服务器的图像".

我正在使用以下方法执行此操作:

- (UIImage *)imageFromURLString:(NSString *)urlString 
{
    NSURL *url = [NSURL URLWithString:urlString];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
    [request setHTTPMethod:@"GET"];

    NSURLResponse *response = nil;
    NSError *error = nil;
    NSData *result = [NSURLConnection sendSynchronousRequest:request          
    returningResponse:&response error:&error];
    [request release];
    [self handleError:error];
    UIImage *resultImage = [UIImage imageWithData:(NSData *)result];

    NSLog(@"urlString: %@",urlString);
    return resultImage;
}
Run Code Online (Sandbox Code Playgroud)

虽然我可以在调试器中看到Image对象的NSData有一些值(以字节为单位),但此函数不会返回预期的图像

虽然,从服务器获取文本的功能非常类似,但我获得了预期的值.

- (NSString *)jsonFromURLString:(NSString *)urlString
{

    NSURL *url = [NSURL URLWithString:urlString];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
    [request setHTTPMethod:@"GET"];

    NSURLResponse *response = nil;
    NSError *error = nil;
    NSData *result …
Run Code Online (Sandbox Code Playgroud)

iphone nsurlconnection uiimage

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

NSURLConnection获取URL

我如何在以下方法中获取URL?

- (void)connectionDidFinishLoading:(NSURLConnection*)theConnection 
Run Code Online (Sandbox Code Playgroud)

iphone nsurlconnection

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

如何跟踪gzip编码的Web内容的下载进度?

我正在写一个从网上下载东西的iPhone客户端.由于蜂窝网络不是那么快,文件可能很大,我想通过进度条改进活动微调器.

到目前为止一切顺利,我正在使用NSURLConnection并检查Content-Length标头以查看我将下载多少字节.然后,在-connection:didReceiveData:回调中,我将接收到的数据附加到我的NSMutableData对象,在那里我可以跟踪到目前为止下载内容的大小与预期的字节数.

这一切都有效,直到你有一个支持gzip压缩的服务器.使用gzip压缩的服务器将x字节作为内容的大小.但是,由于NSURLConnection在后台进行解压缩,因此传递给didReceiveData回调的数据已经扩展.因此,预期下载的字节小于实际接收的字节,以文件的压缩比例的比例.

这意味着进度条溢出,因为预期的字节数比预期的要早得多.我控制服务器时可以做的就是为gzip内容发送特殊标头,以避免NSURLConnection进行解压缩,但我无法控制网络上的所有服务器.

NSURLConnection是否有任何隐藏方法来报告传输的字节而不是扩展的字节?我是否必须编写自己的NSURLConnection来跟踪传输的字节并自行解压缩gzip数据以获得准确的进度条指示器?也许有另一种较低级别的Core Foundation API?

iphone gzip objective-c nsurlconnection

9
推荐指数
2
解决办法
2296
查看次数

从NSBrowser中删除边框

正如标题所说,我实际上想要从NSBrowser控件中删除边框.父母是NSView和NSControl.NSBrowser本身没有可用的方法,父控件也没有.这个似乎完全没有记录.

至于删除边框的原因,因为它以编程方式停靠在另一个视图中,因此视图层次结构意味着已经存在边框.

有任何想法吗?

cocoa nsbrowser

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

寻找用于将iOS应用程序移植到OSX的UIWebViewDelegate的等效项

我正在尝试将iOS应用程序移植到OSX,有一件事我没有得到.iOS应用程序使用UIWebView,更精确的是实现UIWebViewDelegate的UIView:

@interface Dialog : UIView <UIWebViewDelegate> {
Run Code Online (Sandbox Code Playgroud)

并实现这三个委托方法:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request

  navigationType:(UIWebViewNavigationType)navigationType {

- (void)webViewDidFinishLoad:(UIWebView *)webView {

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
Run Code Online (Sandbox Code Playgroud)

有人可以给我一个暗示我如何将其移植到正常的OSX框架?我知道有WebView,但它有4个代表,据我所知,并且这些代理都没有委托方法听起来像那些3.

谢谢

macos cocoa webkit uiwebview ios

8
推荐指数
2
解决办法
3094
查看次数

为什么可能会释放托管对象 - [_ PFManagedObjectReferenceQueue _queueForDealloc:]?

我偶尔会看到像这样的堆栈跟踪崩溃:

0 libobjc.A.dylib 0x97dc0edb objc_msgSend + 27
1 com.apple.CoreData 0x97edcdc2 -[_PFManagedObjectReferenceQueue _queueForDealloc:] + 162
2 com.apple.CoreData 0x97edccbe -[NSManagedObject release] + 94
3 com.apple.CoreFoundation 0x9318ef38 CFRelease + 152
4 com.apple.CoreFoundation 0x931a7460 __CFBasicHashStandardCallback + 384
5 com.apple.CoreFoundation 0x931a706e __CFBasicHashDrain + 478
6 com.apple.CoreFoundation 0x9318f101 _CFRelease + 353
7 com.apple.CoreFoundation 0x931bbc6d _CFAutoreleasePoolPop + 253
8 com.apple.Foundation 0x973270aa NSPopAutoreleasePool + 76
9 com.apple.Foundation 0x97326fd2 -[NSAutoreleasePool drain] + 130
10 com.apple.AppKit 0x95087185 -[NSApplication run] + 627
11 com.apple.AppKit 0x9507f2d9 NSApplicationMain + 574
12 com.karelia.Sandvox 0x70001ef6 …
Run Code Online (Sandbox Code Playgroud)

cocoa core-data nsmanagedobject

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

如何知道文件是否"存储在文件系统缓存中"

国家文件NSDataReadingOptions:

NSDataReadingUncached

指示文件的提示不应存储在文件系统缓存中.对于一次读取和丢弃的数据,此选项可以提高性能.

这一切都有道理.我很好奇是否有办法知道文件是否已经存在于file-sysem缓存中.

例如,如果我需要执行大量文件读取,则优先读取已驻留在缓存中的文件可能是有意义的.

cocoa caching

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

iOS - 从NSFileHandle或NSPipe创建NSURL

我正在通过网络接收编码音频流,但是混合了大量数据,因此我需要接收数据包,删除音频然后播放音频.

AVAudioPlayer,可能是也可能不是最好的工具,但它是我正在追逐的路径,需要来自NSData或NSURL的数据.NSData不起作用,因为它是一个数据流,我希望它一到达就开始继续播放.我的想法是:

NSPipe *pipe = [[NSPipe alloc] init];
NSFileHandle *writeHandle = [pipe fileHandleForWriting];
NSFileHandle *readHandle = [pipe fileHandleForReading];

// in network reception thread...
NSData *audioData = [packet getAudioData];
[writeHandle writeData:audioData];

// in audio thread...
NSURL *url = [[NSURL alloc] init];
[url setResourceValue:NSURLFileResourceTypeNamedPipe 
               forKey:NSURLFileResourceTypeKey 
                error:&error];
// Connect the readHandle
AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc]
                               initWithContentsOfURL:url
                                               error:&error];
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何将`readHandle`传递给URL.如何从现有的NSFileHandle创建NSURL?完全有一些更好的方法吗?有没有办法将数据写入可以成为NSURL的东西?

唯一真正的要求是我可以尽可能近乎实时地播放音频.我不希望在播放之前将数据排队甚至十分之一秒.

avaudioplayer ios

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

iOS Twitter NSURLErrorDomain代码= -1012

我试图通过在我的应用程序中使用twitter阅读来获取用户的联系方式.我在github上发现这个项目看起来真的很棒.我只遇到一个问题.如果我使用来自Twitter的新应用消费者密钥和消费者密钥代码运行它会给我一个错误:

Error Domain=NSURLErrorDomain Code=-1012 "The operation couldn’t be completed. (NSURLErrorDomain error -1012.)" UserInfo=0x6898e80 {NSErrorFailingURLKey=https://api.twitter.com/oauth/request_token, NSErrorFailingURLStringKey=https://api.twitter.com/oauth/request_token, NSUnderlyingError=0x68980e0 "The operation couldn’t be completed. (kCFErrorDomainCFNetwork error -1012.)"}
Run Code Online (Sandbox Code Playgroud)

控制台中的输出是:

2013-01-16 17:55:24.367 DMTwitterOAuth[3411:c07] current status = Prompt for user data and request token to server
2013-01-16 17:55:24.371 DMTwitterOAuth[3411:c07] current status = Requesting token for current user's auth data...
2013-01-16 17:55:25.433 DMTwitterOAuth[3411:c07] current status = Token received from server
Run Code Online (Sandbox Code Playgroud)

在我得到警报视图后,它立即说它遇到了一个NSURLErrorDomain.

另一方面,如果我使用来自另一个Twitter应用程序的其他代码运行它,它会工作,向我提供有关用户的所有详细信息.我只是无法理解为什么它可以使用某些键,而对于其他键则不然.

twitter nsurlrequest ios nsurlerrordomain

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