Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

minor update.

  • Loading branch information...
commit 9f36c74c798d72254ec5cbb0611a5579d8841454 1 parent b93bb6d
@kishikawakatsumi authored
View
0  Classes/JSON/JSON.h 100755 → 100644
File mode changed
View
17 Classes/JSON/NSObject+SBJSON.h 100755 → 100644
@@ -56,22 +56,5 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
- (NSString *)JSONRepresentation;
-/**
- @brief Returns a string containing the receiver encoded in JSON.
-
- Pass in a dictionary with an object that returns a true value for the
- @p HumanReadable key, and the returned JSON will be human readable.
-
- @deprecated This method is deprecated. Use an instance of the SBJSON
- class and set the @p humanReadable attribute instead.
-
- This method is added as a category on NSObject but is only actually
- supported for the following objects:
- @li NSDictionary
- @li NSArray
-
- */
-- (NSString *)JSONRepresentationWithOptions:(NSDictionary *)opts;
-
@end
View
28 Classes/JSON/NSObject+SBJSON.m 100755 → 100644
@@ -33,11 +33,10 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
@implementation NSObject (NSObject_SBJSON)
- (NSString *)JSONFragment {
- SBJSON *generator = [SBJSON new];
+ SBJSON *generator = [[SBJSON new] autorelease];
NSError *error;
NSString *json = [generator stringWithFragment:self error:&error];
- [generator release];
if (!json)
NSLog(@"%@", error);
@@ -45,33 +44,10 @@ - (NSString *)JSONFragment {
}
- (NSString *)JSONRepresentation {
- SBJSON *generator = [SBJSON new];
+ SBJSON *generator = [[SBJSON new] autorelease];
NSError *error;
NSString *json = [generator stringWithObject:self error:&error];
- [generator release];
-
- if (!json)
- NSLog(@"%@", error);
- return json;
-}
-
-- (NSString *)JSONRepresentationWithOptions:(NSDictionary *)x {
- SBJSON *generator = [SBJSON new];
-
- id o;
- if (o = [x objectForKey:@"HumanReadable"])
- [generator setHumanReadable:[o boolValue]];
-
- if (o = [x objectForKey:@"MultiLine"])
- [generator setHumanReadable:[o boolValue]];
-
- if (o = [x objectForKey:@"Pretty"])
- [generator setHumanReadable:[o boolValue]];
-
- NSError *error;
- NSString *json = [generator stringWithObject:self error:&error];
- [generator release];
if (!json)
NSLog(@"%@", error);
View
10 Classes/JSON/NSString+SBJSON.h 100755 → 100644
@@ -38,14 +38,4 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/// Returns the dictionary or array represented in the receiver, or nil on error.
- (id)JSONValue;
-/**
- @brief Returns the dictionary or array represented in the receiver, or nil on error.
- @param opts a dictionary of options
-
- Only one option is supported: MaxDepth. Set it to the maximum recursion level you want to support. 0 means no maximum level; the default is 512.
-
- @deprecated This method is deprecated. Use an instance of the SBJSON class and set the @p maxDepth attribute instead.
- */
-- (id)JSONValueWithOptions:(NSDictionary *)opts;
-
@end
View
35 Classes/JSON/NSString+SBJSON.m 100755 → 100644
@@ -33,51 +33,28 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
@implementation NSString (NSString_SBJSON)
-- (id)JSONFragmentValueWithOptions:(NSDictionary *)opts
+- (id)JSONFragmentValue
{
- SBJSON *json = [SBJSON new];
-
- if (opts) {
- id opt = [opts objectForKey:@"MaxDepth"];
- if (opt)
- [json setMaxDepth:[opt intValue]];
- }
+ SBJSON *json = [[SBJSON new] autorelease];
NSError *error;
id o = [json fragmentWithString:self error:&error];
+
if (!o)
NSLog(@"%@", error);
- [json release];
return o;
}
-
-- (id)JSONValueWithOptions:(NSDictionary *)opts
+- (id)JSONValue
{
- SBJSON *json = [SBJSON new];
-
- if (opts) {
- id opt = [opts objectForKey:@"MaxDepth"];
- if (opt)
- [json setMaxDepth:[opt intValue]];
- }
+ SBJSON *json = [[SBJSON new] autorelease];
NSError *error;
id o = [json objectWithString:self error:&error];
+
if (!o)
NSLog(@"%@", error);
- [json release];
return o;
}
-- (id)JSONFragmentValue
-{
- return [self JSONFragmentValueWithOptions:nil];
-}
-
-- (id)JSONValue
-{
- return [self JSONValueWithOptions:nil];
-}
-
@end
View
45 Classes/JSON/SBJSON.h 100755 → 100644
@@ -42,6 +42,8 @@ enum {
EESCAPE,
ETRAILCOMMA,
ETRAILGARBAGE,
+ EEOF,
+ EINPUT
};
/**
@@ -70,40 +72,45 @@ way you would expect. JSON numbers turn into NSDecimalNumber instances,
as we can thus avoid any loss of precision.
Strictly speaking correctly formed JSON text must have <strong>exactly
-one top-level container</strong>. (Either an Array or an Object.) Bare
-nulls, numbers, booleans and strings are not valid JSON on their own.
+one top-level container</strong>. (Either an Array or an Object.) Scalars,
+i.e. nulls, numbers, booleans and strings, are not valid JSON on their own.
It can be quite convenient to pretend that such fragments are valid
-JSON however. This class lets you do so.
+JSON however, and this class lets you do so.
This class does its best to be as strict as possible, both in what it
accepts and what it generates. (Other than the above mentioned support
for JSON fragments.) For example, it does not support trailing commas
in arrays or objects. Nor does it support embedded comments, or
anything else not in the JSON specification.
-
+
*/
@interface SBJSON : NSObject {
- // Attributes
BOOL humanReadable;
- unsigned maxDepth;
+ BOOL sortKeys;
+ NSUInteger maxDepth;
@private
// Used temporarily during scanning/generation
- unsigned depth;
+ NSUInteger depth;
const char *c;
}
/// Whether we are generating human-readable (multiline) JSON
-- (BOOL)humanReadable;
+/**
+ Set whether or not to generate human-readable JSON. The default is NO, which produces
+ JSON without any whitespace. (Except inside strings.) If set to YES, generates human-readable
+ JSON with linebreaks after each array value and dictionary key/value pair, indented two
+ spaces per nesting level.
+ */
+@property BOOL humanReadable;
-/// Set whether to generate human-readable JSON or not
-- (void)setHumanReadable:(BOOL)y;
+/// Whether or not to sort the dictionary keys in the output
+/** The default is to not sort the keys. */
+@property BOOL sortKeys;
/// The maximum depth the parser will go to
-- (unsigned)maxDepth;
-
-/// Set the maximum depth the parser will go to
-- (void)setMaxDepth:(unsigned)y;
+/** Defaults to 512. */
+@property NSUInteger maxDepth;
/// Return JSON representation of an array or dictionary
- (NSString*)stringWithObject:(id)value error:(NSError**)error;
@@ -117,4 +124,14 @@ anything else not in the JSON specification.
/// Return the fragment represented by the given string
- (id)fragmentWithString:(NSString*)jsonrep error:(NSError**)error;
+/// Return JSON representation (or fragment) for the given object
+- (NSString*)stringWithObject:(id)value
+ allowScalar:(BOOL)x
+ error:(NSError**)error;
+
+/// Parse the string and return the represented object (or scalar)
+- (id)objectWithString:(id)value
+ allowScalar:(BOOL)x
+ error:(NSError**)error;
+
@end
View
186 Classes/JSON/SBJSON.m 100755 → 100644
@@ -107,23 +107,29 @@ - (id)init {
#pragma mark Generator
+
/**
Returns a string containing JSON representation of the passed in value, or nil on error.
- If nil is returned and @p error is not NULL, @p error can be interrogated to find the cause of the error.
+ If nil is returned and @p error is not NULL, @p *error can be interrogated to find the cause of the error.
@param value any instance that can be represented as a JSON fragment
+ @param allowScalar wether to return json fragments for scalar objects
@param error used to return an error by reference (pass NULL if this is not desired)
*/
-- (NSString*)stringWithFragment:(id)value error:(NSError**)error {
+- (NSString*)stringWithObject:(id)value allowScalar:(BOOL)allowScalar error:(NSError**)error {
depth = 0;
NSMutableString *json = [NSMutableString stringWithCapacity:128];
- NSError *err;
- if ([self appendValue:value into:json error:&err])
+ NSError *err2 = nil;
+ if (!allowScalar && ![value isKindOfClass:[NSDictionary class]] && ![value isKindOfClass:[NSArray class]]) {
+ err2 = err(EFRAGMENT, @"Not valid type for JSON");
+
+ } else if ([self appendValue:value into:json error:&err2]) {
return json;
+ }
if (error)
- *error = err;
+ *error = err2;
return nil;
}
@@ -131,25 +137,25 @@ - (NSString*)stringWithFragment:(id)value error:(NSError**)error {
Returns a string containing JSON representation of the passed in value, or nil on error.
If nil is returned and @p error is not NULL, @p error can be interrogated to find the cause of the error.
+ @param value any instance that can be represented as a JSON fragment
+ @param error used to return an error by reference (pass NULL if this is not desired)
+ */
+- (NSString*)stringWithFragment:(id)value error:(NSError**)error {
+ return [self stringWithObject:value allowScalar:YES error:error];
+}
+
+/**
+ Returns a string containing JSON representation of the passed in value, or nil on error.
+ If nil is returned and @p error is not NULL, @p error can be interrogated to find the cause of the error.
+
@param value a NSDictionary or NSArray instance
@param error used to return an error by reference (pass NULL if this is not desired)
*/
- (NSString*)stringWithObject:(id)value error:(NSError**)error {
- NSError *err2;
- if (![value isKindOfClass:[NSDictionary class]] && ![value isKindOfClass:[NSArray class]]) {
- err2 = err(EFRAGMENT, @"Not valid JSON (try -stringWithFragment:error:)");
-
- } else {
- NSString *json = [self stringWithFragment:value error:&err2];
- if (json)
- return json;
- }
-
- if (error)
- *error = err2;
- return nil;
+ return [self stringWithObject:value allowScalar:NO error:error];
}
+
- (NSString*)indent {
return [@"\n" stringByPaddingToLength:1 + 2 * depth withString:@" " startingAtIndex:0];
}
@@ -177,7 +183,7 @@ - (BOOL)appendValue:(id)fragment into:(NSMutableString*)json error:(NSError**)er
[json appendString:@"null"];
} else {
- *error = err(EUNSUPPORTED, [NSString stringWithFormat:@"JSON serialisation not supported for %@", [fragment className]]);
+ *error = err(EUNSUPPORTED, [NSString stringWithFormat:@"JSON serialisation not supported for %@", [fragment class]]);
return NO;
}
return YES;
@@ -188,11 +194,12 @@ - (BOOL)appendArray:(NSArray*)fragment into:(NSMutableString*)json error:(NSErro
depth++;
BOOL addComma = NO;
- NSEnumerator *values = [fragment objectEnumerator];
- for (id value; value = [values nextObject]; addComma = YES) {
+ for (id value in fragment) {
if (addComma)
[json appendString:@","];
-
+ else
+ addComma = YES;
+
if ([self humanReadable])
[json appendString:[self indent]];
@@ -214,11 +221,15 @@ - (BOOL)appendDictionary:(NSDictionary*)fragment into:(NSMutableString*)json err
NSString *colon = [self humanReadable] ? @" : " : @":";
BOOL addComma = NO;
- NSEnumerator *values = [fragment keyEnumerator];
- for (id value; value = [values nextObject]; addComma = YES) {
-
+ NSArray *keys = [fragment allKeys];
+ if (self.sortKeys)
+ keys = [keys sortedArrayUsingSelector:@selector(compare:)];
+
+ for (id value in keys) {
if (addComma)
[json appendString:@","];
+ else
+ addComma = YES;
if ([self humanReadable])
[json appendString:[self indent]];
@@ -261,7 +272,8 @@ - (BOOL)appendString:(NSString*)fragment into:(NSMutableString*)json error:(NSEr
[json appendString:fragment];
} else {
- for (unsigned i = 0; i < [fragment length]; i++) {
+ NSUInteger length = [fragment length];
+ for (NSUInteger i = 0; i < length; i++) {
unichar uc = [fragment characterAtIndex:i];
switch (uc) {
case '"': [json appendString:@"\\\""]; break;
@@ -287,33 +299,62 @@ - (BOOL)appendString:(NSString*)fragment into:(NSMutableString*)json error:(NSEr
return YES;
}
-#pragma mark Scanner
+#pragma mark Parser
/**
Returns the object represented by the passed-in string or nil on error. The returned object can be
a string, number, boolean, null, array or dictionary.
@param repr the json string to parse
+ @param allowScalar whether to return objects for JSON fragments
@param error used to return an error by reference (pass NULL if this is not desired)
*/
-- (id)fragmentWithString:(NSString*)repr error:(NSError**)error {
- c = [repr UTF8String];
+- (id)objectWithString:(id)repr allowScalar:(BOOL)allowScalar error:(NSError**)error {
+
+ if (!repr) {
+ if (error)
+ *error = err(EINPUT, @"Input was 'nil'");
+ return nil;
+ }
+
depth = 0;
+ c = [repr UTF8String];
id o;
NSError *err2 = nil;
- BOOL success = [self scanValue:&o error:&err2];
-
- if (success && ![self scanIsAtEnd]) {
- err2 = err(ETRAILGARBAGE, @"Garbage after JSON fragment");
- success = NO;
+ if (![self scanValue:&o error:&err2]) {
+ if (error)
+ *error = err2;
+ return nil;
}
- if (success)
- return o;
- if (error)
- *error = err2;
- return nil;
+ // We found some valid JSON. But did it also contain something else?
+ if (![self scanIsAtEnd]) {
+ if (error)
+ *error = err(ETRAILGARBAGE, @"Garbage after JSON");
+ return nil;
+ }
+
+ // If we don't allow scalars, check that the object we've found is a valid JSON container.
+ if (!allowScalar && ![o isKindOfClass:[NSDictionary class]] && ![o isKindOfClass:[NSArray class]]) {
+ if (error)
+ *error = err(EFRAGMENT, @"Valid fragment, but not JSON");
+ return nil;
+ }
+
+ NSAssert1(o, @"Should have a valid object from %@", repr);
+ return o;
+}
+
+/**
+ Returns the object represented by the passed-in string or nil on error. The returned object can be
+ a string, number, boolean, null, array or dictionary.
+
+ @param repr the json string to parse
+ @param error used to return an error by reference (pass NULL if this is not desired)
+ */
+- (id)fragmentWithString:(NSString*)repr error:(NSError**)error {
+ return [self objectWithString:repr allowScalar:YES error:error];
}
/**
@@ -324,23 +365,12 @@ - (id)fragmentWithString:(NSString*)repr error:(NSError**)error {
@param error used to return an error by reference (pass NULL if this is not desired)
*/
- (id)objectWithString:(NSString*)repr error:(NSError**)error {
-
- NSError *err2 = nil;
- id o = [self fragmentWithString:repr error:&err2];
-
- if (o && ([o isKindOfClass:[NSDictionary class]] || [o isKindOfClass:[NSArray class]]))
- return o;
-
- if (o)
- err2 = err(EFRAGMENT, @"Valid fragment, but not JSON");
-
- if (error)
- *error = err2;
-
- return nil;
+ return [self objectWithString:repr allowScalar:NO error:error];
}
-
+/*
+ In contrast to the public methods, it is an error to omit the error parameter here.
+ */
- (BOOL)scanValue:(NSObject **)o error:(NSError **)error
{
skipWhitespace(c);
@@ -373,11 +403,18 @@ - (BOOL)scanValue:(NSObject **)o error:(NSError **)error
*error = err(EPARSENUM, @"Leading + disallowed in number");
return NO;
break;
+ case 0x0:
+ *error = err(EEOF, @"Unexpected end of string");
+ return NO;
+ break;
default:
*error = err(EPARSE, @"Unrecognised leading character");
return NO;
break;
}
+
+ NSAssert(0, @"Should never get here");
+ return NO;
}
- (BOOL)scanRestOfTrue:(NSNumber **)o error:(NSError **)error
@@ -448,7 +485,7 @@ - (BOOL)scanRestOfArray:(NSMutableArray **)o error:(NSError **)error
}
}
- *error = err(EPARSE, @"End of input while parsing array");
+ *error = err(EEOF, @"End of input while parsing array");
return NO;
}
@@ -500,7 +537,7 @@ - (BOOL)scanRestOfDictionary:(NSMutableDictionary **)o error:(NSError **)error
}
}
- *error = err(EPARSE, @"End of input while parsing object");
+ *error = err(EEOF, @"End of input while parsing object");
return NO;
}
@@ -550,7 +587,7 @@ - (BOOL)scanRestOfString:(NSMutableString **)o error:(NSError **)error
}
c--; // hack.
break;
- default:
+ default:
*error = err(EESCAPE, [NSString stringWithFormat:@"Illegal escape sequence '0x%x'", uc]);
return NO;
break;
@@ -567,7 +604,7 @@ - (BOOL)scanRestOfString:(NSMutableString **)o error:(NSError **)error
}
} while (*c);
- *error = err(EPARSE, @"Unexpected EOF while parsing string");
+ *error = err(EEOF, @"Unexpected EOF while parsing string");
return NO;
}
@@ -696,35 +733,8 @@ - (BOOL)scanIsAtEnd
#pragma mark Properties
-/**
- Returns whether the instance is configured to generate human readable JSON.
- */
-- (BOOL)humanReadable {
- return humanReadable;
-}
-
-/**
- Set whether or not to generate human-readable JSON. The default is NO, which produces
- JSON without any whitespace. (Except inside strings.) If set to YES, generates human-readable
- JSON with linebreaks after each array value and dictionary key/value pair, indented two
- spaces per nesting level.
- */
-- (void)setHumanReadable:(BOOL)y {
- humanReadable = y;
-}
-
-/**
- Returns the maximum depth allowed when parsing JSON.
- */
-- (unsigned)maxDepth {
- return maxDepth;
-}
-
-/**
- Set the maximum depth allowed when parsing JSON. The default value is 512.
- */
-- (void)setMaxDepth:(unsigned)y {
- maxDepth = y;
-}
+@synthesize humanReadable;
+@synthesize sortKeys;
+@synthesize maxDepth;
@end
View
40 HatenaTouch.xcodeproj/project.pbxproj
@@ -7,15 +7,15 @@
objects = {
/* Begin PBXBuildFile section */
- 14016AAD0EDB1B9F00A427D9 /* NSObject+SBJSON.m in Sources */ = {isa = PBXBuildFile; fileRef = 14016AA80EDB1B9F00A427D9 /* NSObject+SBJSON.m */; };
- 14016AAE0EDB1B9F00A427D9 /* NSString+SBJSON.m in Sources */ = {isa = PBXBuildFile; fileRef = 14016AAA0EDB1B9F00A427D9 /* NSString+SBJSON.m */; };
- 14016AAF0EDB1B9F00A427D9 /* SBJSON.m in Sources */ = {isa = PBXBuildFile; fileRef = 14016AAC0EDB1B9F00A427D9 /* SBJSON.m */; };
14016C360E8170E000DF1904 /* Comment.png in Resources */ = {isa = PBXBuildFile; fileRef = 14016C350E8170E000DF1904 /* Comment.png */; };
14016DC00E823DBC00DF1904 /* Syntax.png in Resources */ = {isa = PBXBuildFile; fileRef = 14016DBF0E823DBB00DF1904 /* Syntax.png */; };
14016DC20E823DDB00DF1904 /* Album.png in Resources */ = {isa = PBXBuildFile; fileRef = 14016DC10E823DDB00DF1904 /* Album.png */; };
14016DC40E823DF800DF1904 /* Camera.png in Resources */ = {isa = PBXBuildFile; fileRef = 14016DC30E823DF800DF1904 /* Camera.png */; };
1401729D0E834C9400DF1904 /* back.png in Resources */ = {isa = PBXBuildFile; fileRef = 1401729B0E834C9400DF1904 /* back.png */; };
1401729E0E834C9400DF1904 /* forward.png in Resources */ = {isa = PBXBuildFile; fileRef = 1401729C0E834C9400DF1904 /* forward.png */; };
+ 141324520F23CB4100E82250 /* NSObject+SBJSON.m in Sources */ = {isa = PBXBuildFile; fileRef = 1413244D0F23CB4100E82250 /* NSObject+SBJSON.m */; };
+ 141324530F23CB4100E82250 /* NSString+SBJSON.m in Sources */ = {isa = PBXBuildFile; fileRef = 1413244F0F23CB4100E82250 /* NSString+SBJSON.m */; };
+ 141324540F23CB4100E82250 /* SBJSON.m in Sources */ = {isa = PBXBuildFile; fileRef = 141324510F23CB4100E82250 /* SBJSON.m */; };
141DE83A0E71A0BC00FBA9A5 /* HatenaTouchAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 141DE8370E71A0BC00FBA9A5 /* HatenaTouchAppDelegate.m */; };
141DE83B0E71A0BC00FBA9A5 /* RootViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 141DE8390E71A0BC00FBA9A5 /* RootViewController.m */; };
141DE8400E71A10700FBA9A5 /* RootViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 141DE83F0E71A10700FBA9A5 /* RootViewController.xib */; };
@@ -81,13 +81,6 @@
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
- 14016AA60EDB1B9F00A427D9 /* JSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSON.h; sourceTree = "<group>"; };
- 14016AA70EDB1B9F00A427D9 /* NSObject+SBJSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+SBJSON.h"; sourceTree = "<group>"; };
- 14016AA80EDB1B9F00A427D9 /* NSObject+SBJSON.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+SBJSON.m"; sourceTree = "<group>"; };
- 14016AA90EDB1B9F00A427D9 /* NSString+SBJSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+SBJSON.h"; sourceTree = "<group>"; };
- 14016AAA0EDB1B9F00A427D9 /* NSString+SBJSON.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+SBJSON.m"; sourceTree = "<group>"; };
- 14016AAB0EDB1B9F00A427D9 /* SBJSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SBJSON.h; sourceTree = "<group>"; };
- 14016AAC0EDB1B9F00A427D9 /* SBJSON.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SBJSON.m; sourceTree = "<group>"; };
14016AC10EE13DAA00A427D9 /* Debug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Debug.h; sourceTree = "<group>"; };
14016C350E8170E000DF1904 /* Comment.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Comment.png; sourceTree = "<group>"; };
14016DBF0E823DBB00DF1904 /* Syntax.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Syntax.png; sourceTree = "<group>"; };
@@ -95,6 +88,13 @@
14016DC30E823DF800DF1904 /* Camera.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Camera.png; sourceTree = "<group>"; };
1401729B0E834C9400DF1904 /* back.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = back.png; sourceTree = "<group>"; };
1401729C0E834C9400DF1904 /* forward.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = forward.png; sourceTree = "<group>"; };
+ 1413244B0F23CB4100E82250 /* JSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSON.h; sourceTree = "<group>"; };
+ 1413244C0F23CB4100E82250 /* NSObject+SBJSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+SBJSON.h"; sourceTree = "<group>"; };
+ 1413244D0F23CB4100E82250 /* NSObject+SBJSON.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+SBJSON.m"; sourceTree = "<group>"; };
+ 1413244E0F23CB4100E82250 /* NSString+SBJSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+SBJSON.h"; sourceTree = "<group>"; };
+ 1413244F0F23CB4100E82250 /* NSString+SBJSON.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+SBJSON.m"; sourceTree = "<group>"; };
+ 141324500F23CB4100E82250 /* SBJSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SBJSON.h; sourceTree = "<group>"; };
+ 141324510F23CB4100E82250 /* SBJSON.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SBJSON.m; sourceTree = "<group>"; };
141DE8360E71A0BC00FBA9A5 /* HatenaTouchAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HatenaTouchAppDelegate.h; sourceTree = "<group>"; };
141DE8370E71A0BC00FBA9A5 /* HatenaTouchAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HatenaTouchAppDelegate.m; sourceTree = "<group>"; };
141DE8380E71A0BC00FBA9A5 /* RootViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RootViewController.h; sourceTree = "<group>"; };
@@ -252,13 +252,13 @@
14016AA50EDB1B9F00A427D9 /* JSON */ = {
isa = PBXGroup;
children = (
- 14016AA60EDB1B9F00A427D9 /* JSON.h */,
- 14016AA70EDB1B9F00A427D9 /* NSObject+SBJSON.h */,
- 14016AA80EDB1B9F00A427D9 /* NSObject+SBJSON.m */,
- 14016AA90EDB1B9F00A427D9 /* NSString+SBJSON.h */,
- 14016AAA0EDB1B9F00A427D9 /* NSString+SBJSON.m */,
- 14016AAB0EDB1B9F00A427D9 /* SBJSON.h */,
- 14016AAC0EDB1B9F00A427D9 /* SBJSON.m */,
+ 1413244B0F23CB4100E82250 /* JSON.h */,
+ 1413244C0F23CB4100E82250 /* NSObject+SBJSON.h */,
+ 1413244D0F23CB4100E82250 /* NSObject+SBJSON.m */,
+ 1413244E0F23CB4100E82250 /* NSString+SBJSON.h */,
+ 1413244F0F23CB4100E82250 /* NSString+SBJSON.m */,
+ 141324500F23CB4100E82250 /* SBJSON.h */,
+ 141324510F23CB4100E82250 /* SBJSON.m */,
);
path = JSON;
sourceTree = "<group>";
@@ -607,13 +607,13 @@
149B17DD0E77053A00E0D2A9 /* Reachability.m in Sources */,
14F415E10EA1FACB0004D334 /* NSDataAdditions.m in Sources */,
14F416210EA215D30004D334 /* Base64.cpp in Sources */,
- 14016AAD0EDB1B9F00A427D9 /* NSObject+SBJSON.m in Sources */,
- 14016AAE0EDB1B9F00A427D9 /* NSString+SBJSON.m in Sources */,
- 14016AAF0EDB1B9F00A427D9 /* SBJSON.m in Sources */,
149F5E050EE168A300327D14 /* HttpClient.m in Sources */,
149F5E060EE168A300327D14 /* StringHelper.m in Sources */,
149F5E210EE16A7200327D14 /* HUDMessageView.m in Sources */,
14E8F8760EE6DDF10085F1F4 /* NSString+XMLExtensions.m in Sources */,
+ 141324520F23CB4100E82250 /* NSObject+SBJSON.m in Sources */,
+ 141324530F23CB4100E82250 /* NSString+SBJSON.m in Sources */,
+ 141324540F23CB4100E82250 /* SBJSON.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Please sign in to comment.
Something went wrong with that request. Please try again.